Lingo整数规划学习笔记

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

定义

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

分类

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

特点

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

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

求解方法

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

具体实例及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))<y(i));!Lingo中除了一些特殊的模块,其他的语句均为约束语句;
end

在这里插入图片描述

题型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变量的实际问题,再研究解法.

相互排斥的计划

在这里插入图片描述
在这里插入图片描述
x i {_i} i为1就表示选用该地点,为0就表示不选。

相互排斥的约束条件

在这里插入图片描述

固定费用问题

在这里插入图片描述

指派问题

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

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

阵。

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

来求解。

在这里插入图片描述
在这里插入图片描述
例题:
在这里插入图片描述

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

在这里插入图片描述

混合整数规划

在这里插入图片描述

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

在这里插入图片描述
最优解为-12.

小结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值