Lingo整数规划学习笔记

目录

  • 整数规划的介绍及其基本形式
    • 定义
    • 分类
    • 特点
    • 求解方法
  • 具体实例及Lingo求解
    • 题型1:常见形式的整数规划
    • 题型2:0-1整数规划
      • 相互排斥的计划
      • 相互排斥的约束条件
      • 固定费用问题
      • 指派问题
    • 混合整数规划
  • 小结

整数规划的介绍及其基本形式

定义

规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。目前所流行的求解整数规划的方法,往往只适用于整数线性规划。目前还没有一种方法能有效地求解一切整数规

分类

如不加特殊说明,一般指整数线性规划。对于整数线性规划模型大致可分为两类:
1 o {^o} o 变量全限制为整数时,称纯(完全)整数规划。
2 o {^o} o变量部分限制为整数的,称混合整数规划。

特点

(i) 原线性规划有最优解,当自变量限制为整数后,其整数规划解出现下述情况:
①原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。
②整数规划无可行解。

(ii) 整数规划最优解不能按照实数最优解简单取整而获得。

求解方法

(i)分枝定界法—可求纯或混合整数线性规划。
(ii)割平面法—可求纯或混合整数线性规划。
(iii)隐枚举法—求解“0-1”整数规划:
①过滤隐枚举法;
②分枝隐枚举法。
(iv)匈牙利法—解决指派问题(“0-1”规划特殊情形)。
(v)蒙特卡洛法—求解各种类型规划。

具体实例及Lingo求解

题型1:常见形式的整数规划

Lingo整数规划学习笔记_第1张图片

model:
sets:
var/1,2/:x,y;
link(var,var):a;!定义集合,以及赋给集合不同的属性名,有点像C语言里面的类class;
endsets

data:
a=9 7 
  7 20;
y=56 70;!给有属性名的集合赋值;
enddata

max=40*x(1)+90*x(2);!目标函数,Lingo中识别目标函数是用max和min来,所以目标函数语句写在哪都可;
@for(var:@gin(x));
@for(var(i):@sum(var(j):a(i,j)*x(j))

Lingo整数规划学习笔记_第2张图片

题型2:0-1整数规划

0 −1型整数规划是整数规划中的特殊情形,它的变量x j {_j} j 仅取值0 或1。这时x j {_j} j 称为0 −1变量,或称二进制变量。x j {_j} j 仅取值0 或1 这个条件可由下述约束条件:0 ≤x j {_j} j ≤ 1 ,整数所代替,是和一般整数规划的约束条件形式一致的。在实际问题中,如果引入 0 −1变量,就可以把有各种情况需要分别讨论的线性规划问题统一在一个问题中讨论了。我们先介绍引入0 −1变量的实际问题,再研究解法.

相互排斥的计划

Lingo整数规划学习笔记_第3张图片
Lingo整数规划学习笔记_第4张图片
x i {_i} i为1就表示选用该地点,为0就表示不选。

相互排斥的约束条件

Lingo整数规划学习笔记_第5张图片

固定费用问题

Lingo整数规划学习笔记_第6张图片

指派问题

指派问题即为分配n个人去做n项工作,每个人做且仅做一项工作,第i人对第j项工作需要花费c i j _{ij} ij

时间,问应该如何分配工作才能使总工作时间最小。其中我们称c i j _{ij} ij构成的矩阵C为指派系数矩

阵。

一个人的相对一份工作的状态只有两种,那就是做与不做,所以我们可以很自然的联想到用0-1规划问题

来求解。

Lingo整数规划学习笔记_第7张图片
Lingo整数规划学习笔记_第8张图片
例题:
Lingo整数规划学习笔记_第9张图片

model:
sets:
var/1..5/;
link(var,var):c,x;!定义集合,以及赋给集合不同的属性名,有点像C语言里面的类class;
endsets

data:
c=3 8 2 10 3 
  8 7 2 9 7 
  6 4 2 7 5
  8 4 2 3 5
  9 10 6 9 10;!给有属性名的集合赋值;
enddata

min=@sum(link:c*x);!目标函数,Lingo中识别目标函数是用max和min来,所以目标函数语句写在哪都可;
@for(link:@bin(x));
@for(var(i):@sum(var(j):x(i,j))=1); !Lingo中除了一些特殊的模块,其他的语句均为约束语句;
@for(var(j):@sum(var(i):x(i,j))=1);
end

Lingo整数规划学习笔记_第10张图片

混合整数规划

Lingo整数规划学习笔记_第11张图片

model:
sets:
var1/1..3/:c,x;
var2/1,2/:b;
link(var2,var1):a;!定义集合,以及赋给集合不同的属性名,有点像C语言里面的类class;
endsets

data:
a=1 1 1
  4 2 1;!给有属性名的集合赋值;
b=7 12;
c=-3 -2 -1;
enddata

min=@sum(var1:c*x);!目标函数,Lingo中识别目标函数是用max和min来,所以目标函数语句写在哪都可;
@bin(x(3));
@sum(var1(j):a(1,j)*x)<=b(1); !Lingo中除了一些特殊的模块,其他的语句均为约束语句;
@sum(var1(j):a(2,j)*x)=b(2);
end

Lingo整数规划学习笔记_第12张图片
最优解为-12.

小结

本文讲述了整数规划的主要几个类型,以及一些常见的应用方法,给出了部分例题的Lingo求解。
参考资料:数学建模-算法与应用,第2版,司守奎,孙兆亮。

你可能感兴趣的:(数学建模学习记录,动态规划,线性代数,矩阵,算法)