lingo及举例

合集下载

实验利用Lingo求解整数规划和非线性规划问题

实验利用Lingo求解整数规划和非线性规划问题

三、Lingo 循环编程举例
例5 用Lingo循环编程语句求解线性规划模型
max z 72x1 64x2
x1 x2 50, 132xx1 1180x0,2 480, x1 0, x2 0.
三、划 模型
max z 72x1 64x2
MODEL: SETS: person/A,B,C,D/; task/1..4/; assign(person,task):a,x; ENDSETS DATA: a=1100,800,1000,700,
600,500,300,800, 400,800,1000,900, 1100,1000,500,700; ENDDATA min=@sum(assign:a*x); @for(person(i):@sum(task(j):x(i,j))=1); @for(task(j):@sum(person(i):x(i,j))=1); @for(assign(i,j):@bin(x(i,j))); END
12,8 3,0; enddata
!数据赋值;
max=@sum(bliang(i):a(i)*x(i)); !目的函数;
@for(yshu(j):@sum(bliang(i):x(i)*c(j,i))<=b(j));
!约束条件;
例6、指派问题
企业在各地有4项业务,选定了4位业务员去处理。因为 业务能力、经验和其他情况不同,4业务员去处理4项业 务旳费用(单位:元)各不相同,见下表:
(3) 集合旳循环函数 集合旳循环函数能够使全部旳元素反复完毕某些操作.
函数
函数功能
• 形成集合全部元素需满足旳约
@for
束条件
• 计算集合中元素所在体现式旳
@sum

Lingo超经典案例大全

Lingo超经典案例大全

Lingo超经典案例大全Lingo超经典案例大全LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器〞。

Lingo超强的优化计算能力在许多方面〔线性规划、非线性规划、线性整数规划、非线性整数规划、非线性混合规划、二次规划等〕比matlab、maple等强得多,Lingo编程简洁明了,数学模型不用做大的改动〔或者不用改动〕便可以直接采纳Lingo语言编程,十分直观。

Lingo模型由4个段构成:〔1〕集合段〔sets endsets〕;〔2〕数据段〔data enddata);(3)初始段〔init endinit〕;〔4〕目标与约束段。

Lingo的五大优点:1. 对大规模数学规划,LINGO语言所建模型较简洁,语句不多;2. 模型易于扩展,因为@FOR、@SUM等语句并没有指定循环或求和的上下限,假如在集合定义部分增加集合成员的个数,则循环或求和自然扩展,不需要改动目标函数和约束条件;3. 数据初始化部分与其它部分语句分开,对同一模型用不同数据来计算时,只需改动数据部分即可,其它语句不变;4. “集合〞是LINGO有特色的概念,它把实际问题中的事物与数学变量及常量联系起来,是实际问题到数学量的抽象,它比C语言中的数组用处更为广泛。

5. 使用了集合以及@FOR、@SUM等集合操作函数以后可以用简洁的语句表达出常见的规划模型中的目标函数和约束条件,即使模型有大量决策变量和大量数据,组成模型的语句并不随之增加.一、求解线性整数规划、非线性整数规划问题:1.线性整数规划:model:max=x1+x2;x1+9/14*x20.001;@abs(x2-1)>0.001;end求得x1=2,x2=2.若再次排除这组解,发觉Lingo解不出第三组解了,这时我们可以断定:此优化模型有两组解:x1=3,x2=1和x1=2,x2=2.求解模型时需留意:Lingo中,默认变量均为非负;输出的解可能是最优解中的一组,要推断、检验是否还有其他解〔依据具体问题的解的状况或用排除已知最优解的约束条件法〕。

Lingo的应用实例

Lingo的应用实例

Lingo应用——旅游路线最短问题题目:从北京乘飞机到东京、纽约、墨西哥城、伦敦、巴黎五个城市做旅游,每个城市去且仅去一次,再回到东京,问如何安排旅游线路,使总旅程最短。

各城市之间的航线距离如下表:运用lingo软件求解模型建立前问题分析:1.这是一个求路线最短的问题,题目给出了两两城市之间的距离,而在最短路线中,这些城市有的两个城市是直接相连接的(即紧接着先后到达的关系),有些城市之间就可能没有这种关系,所以给出的两两城市距离中有些在最后的最短路线距离计算中使用到了,有些则没有用。

这是一个0-1规划的问题,也是一个线性规划的问题。

2.由于每个城市去且仅去一次,最终肯定是形成一个圈的结构,这就导致了这六个城市其中有的两个城市是直接相连的,另外也有两个城市是不连接的。

这就可以考虑设0-1变量,如果两个城市紧接着去旅游的则为1,否则为0。

就如同下图实线代表两个城市相连为1,虚线代表没有相连为03. 因为每个城市只去一次,所以其中任何一个城市的必有且仅有一条进入路线和一条出去的路线。

求解:为了方便解题,给上面六个城市进行编号,如下表(因为北京是起点, 将其标为1)假设:设变量x ij 。

如果x ij =1,则表示城市i 与城市j 直接相连(即先后紧接到达关系),否则若x ij =0,则表示城市i 与城市j 不相连。

特别说明:x ij 和x ji 是同一变量,都表示表示城市i 与城市j 是否有相连的关系。

这里取其中x ij (I<j)的变量。

模型建立:由于这是一个最短路线的问题,且变量已经设好。

目标函数:min z=51*x12+78*x13+68*x14+51*x15+13*x16+56*x23+35*x24+21*x25+60*x26+21*x34+57*x35+70*x36+36*x45+68*x46+61*x56约束条件:1. 上面目标函数中的变量是表示两个城市是否直接相连接的关系,且最短路线是可以形成圈的,如下图实线代表两个城市相连为1,虚线代表没有相连为0如上图城市a和城市b有直接相连接的关系,所以之间变量为1,而城市a 与城市e则没有直接相连接的关系,之间变量为0。

lingo基本用法

lingo基本用法

lingo基本用法以下是 9 条关于“lingo 基本用法”的内容:1. 嘿,你知道吗,lingo 里的变量定义可简单啦!就像给东西起个名字一样自然。

比如说,咱要算一堆苹果的数量,那就可以设个变量叫apple_num 呀,这不就清楚明白啦!2. 哇塞,lingo 的约束条件就像是给问题加上规矩。

就好比说,规定一个房间最多能进 10 个人,这就是个约束呀。

比如限制某种资源不能超过多少,lingo 就能很好地处理呢!3. 哎呀呀,lingo 的目标函数那可重要了!这就好比是你要去追求的目标。

比如你想让利润最大化,那目标函数就是让利润相关的表达式达到最大呀!像算怎么卖东西能赚最多钱,lingo 就能帮你找到答案哟!4. 嘿,lingo 的表达式书写也不难呢!就像写个数学式子一样。

比如 2x +3y 这么简单明了。

要计算一些关系,用它来写表达式再合适不过了!5. 哇哦,lingo 里的集合定义多有意思啊!像是把一群相关的东西归到一起。

比如把不同类型的商品归成一个集合,然后对它们进行统一的处理呀,是不是很方便呀?6. 哎呀,lingo 的求解命令一敲,就等着答案出来啦!就像你按下按钮,机器就开始工作一样。

你看,多神奇啊,一下子就知道结果了呢!7. 嘿,lingo 还能处理复杂的数据呢!就像一个聪明的小助手,不管多乱的数据它都能理清楚。

比如算一大堆乱七八糟数字的关系,lingo 绝对能应付得来呀!8. 哇,lingo 的模型建立虽然要动点脑筋,但一旦建好了,那可太好用啦!就跟盖房子一样,辛苦一点,盖好了住着就舒服啦。

你想想,自己建的模型能用起来,多有成就感呀!9. 哎呀呀,掌握了 lingo 的基本用法,那真的是能解决好多问题呢!不管是算数量还是优化方案,都不在话下。

所以呀,还不赶紧去学学,让它为你服。

运筹学实例分析及lingo求解讲解

运筹学实例分析及lingo求解讲解

运筹学实例分析及lingo 求解一、线性规划某公司有6个仓库,库存货物总数分别为60、55、51、43、41、52,现有8个客户各要一批货,数量分别为35,37,22,32,41,32,43,38。

各供货仓库到8个客户处的单位货物运输价见表试确定各仓库到各客户处的货物调运数量,使总的运输费用最小。

解:设ijx 表示从第i 个仓库到第j 个客户的货物运量。

ij c表示从第i 个仓库到第j 个客户的单位货物运价,i a 表示第i 个仓库的最大供货量,j d 表示第j 个客户的订货量。

目标函数是使总运输费用最少,约束条件有三个:1、各仓库运出的货物总量不超过其库存数2、各客户收到的货物总量等于其订货数量3、非负约束数学模型为:∑∑===6181)(min i j ijij x c x f⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧≥===≤∑∑==08,,2,1,6,2,1,,..6181ij j i ij i j ij x j d x i a x t s 编程如下:model : Sets :Wh/w1..w6/:ai; Vd/v1..v8/:dj;links(wh,vd):c,x;endsetsData:ai=60,55,51,43,41,52;dj=35,37,22,32,41,32,43,38;c=6,2,6,7,4,2,5,94,9,5,3,8,5,8,25,2,1,9,7,4,3,37,6,7,3,9,2,7,12,3,9,5,7,2,6,55,5,2,2,8,1,4,3;EnddataMin=@sum(links(i,j):c(i,j)*x(i,j));@for(wh(i):@sum(vd(j):x(i,j))<=ai(i));@for(vd(j):@sum(wh(i):x(i,j))=dj(j));endGlobal optimal solution found.Objective value: 664.0000Total solver iterations: 0Variable Value Reduced Cost AI( W1) 60.00000 0.000000 AI( W2) 55.00000 0.000000 AI( W3) 51.00000 0.000000 AI( W4) 43.00000 0.000000 AI( W5) 41.00000 0.000000 AI( W6) 52.00000 0.000000 DJ( V1) 35.00000 0.000000 DJ( V2) 37.00000 0.000000 DJ( V3) 22.00000 0.000000 DJ( V4) 32.00000 0.000000 DJ( V5) 41.00000 0.000000 DJ( V6) 32.00000 0.000000 DJ( V7) 43.00000 0.000000 DJ( V8) 38.00000 0.000000 C( W1, V1) 6.000000 0.000000 C( W1, V2) 2.000000 0.000000 C( W1, V3) 6.000000 0.000000 C( W1, V4) 7.000000 0.000000 C( W1, V5) 4.000000 0.000000 C( W1, V6) 2.000000 0.000000 C( W1, V7) 5.000000 0.000000C( W2, V1) 4.000000 0.000000 C( W2, V2) 9.000000 0.000000 C( W2, V3) 5.000000 0.000000 C( W2, V4) 3.000000 0.000000 C( W2, V5) 8.000000 0.000000 C( W2, V6) 5.000000 0.000000 C( W2, V7) 8.000000 0.000000 C( W2, V8) 2.000000 0.000000 C( W3, V1) 5.000000 0.000000 C( W3, V2) 2.000000 0.000000 C( W3, V3) 1.000000 0.000000 C( W3, V4) 9.000000 0.000000 C( W3, V5) 7.000000 0.000000 C( W3, V6) 4.000000 0.000000 C( W3, V7) 3.000000 0.000000 C( W3, V8) 3.000000 0.000000 C( W4, V1) 7.000000 0.000000 C( W4, V2) 6.000000 0.000000 C( W4, V3) 7.000000 0.000000 C( W4, V4) 3.000000 0.000000 C( W4, V5) 9.000000 0.000000 C( W4, V6) 2.000000 0.000000 C( W4, V7) 7.000000 0.000000 C( W4, V8) 1.000000 0.000000 C( W5, V1) 2.000000 0.000000 C( W5, V2) 3.000000 0.000000 C( W5, V3) 9.000000 0.000000 C( W5, V4) 5.000000 0.000000 C( W5, V5) 7.000000 0.000000 C( W5, V6) 2.000000 0.000000 C( W5, V7) 6.000000 0.000000 C( W5, V8) 5.000000 0.000000 C( W6, V1) 5.000000 0.000000 C( W6, V2) 5.000000 0.000000 C( W6, V3) 2.000000 0.000000 C( W6, V4) 2.000000 0.000000 C( W6, V5) 8.000000 0.000000 C( W6, V6) 1.000000 0.000000 C( W6, V7) 4.000000 0.000000 C( W6, V8) 3.000000 0.000000 X( W1, V1) 0.000000 5.000000 X( W1, V2) 19.00000 0.000000 X( W1, V3) 0.000000 5.000000X( W1, V5) 41.00000 0.000000 X( W1, V6) 0.000000 2.000000 X( W1, V7) 0.000000 2.000000 X( W1, V8) 0.000000 10.00000 X( W2, V1) 1.000000 0.000000 X( W2, V2) 0.000000 4.000000 X( W2, V3) 0.000000 1.000000 X( W2, V4) 32.00000 0.000000 X( W2, V5) 0.000000 1.000000 X( W2, V6) 0.000000 2.000000 X( W2, V7) 0.000000 2.000000 X( W2, V8) 0.000000 0.000000 X( W3, V1) 0.000000 4.000000 X( W3, V2) 11.00000 0.000000 X( W3, V3) 0.000000 0.000000 X( W3, V4) 0.000000 9.000000 X( W3, V5) 0.000000 3.000000 X( W3, V6) 0.000000 4.000000 X( W3, V7) 40.00000 0.000000 X( W3, V8) 0.000000 4.000000 X( W4, V1) 0.000000 4.000000 X( W4, V2) 0.000000 2.000000 X( W4, V3) 0.000000 4.000000 X( W4, V4) 0.000000 1.000000 X( W4, V5) 0.000000 3.000000 X( W4, V6) 5.000000 0.000000 X( W4, V7) 0.000000 2.000000 X( W4, V8) 38.00000 0.000000 X( W5, V1) 34.00000 0.000000 X( W5, V2) 7.000000 0.000000 X( W5, V3) 0.000000 7.000000 X( W5, V4) 0.000000 4.000000 X( W5, V5) 0.000000 2.000000 X( W5, V6) 0.000000 1.000000 X( W5, V7) 0.000000 2.000000 X( W5, V8) 0.000000 5.000000 X( W6, V1) 0.000000 3.000000 X( W6, V2) 0.000000 2.000000 X( W6, V3) 22.00000 0.000000 X( W6, V4) 0.000000 1.000000 X( W6, V5) 0.000000 3.000000 X( W6, V6) 27.00000 0.000000 X( W6, V7) 3.000000 0.000000Row Slack or Surplus Dual Price 1 664.0000 -1.000000 2 0.000000 3.000000 3 22.00000 0.000000 4 0.000000 3.000000 5 0.000000 1.000000 6 0.000000 2.000000 7 0.000000 2.000000 8 0.000000 -4.000000 9 0.000000 -5.000000 10 0.000000 -4.000000 11 0.000000 -3.000000 12 0.000000 -7.000000 13 0.000000 -3.000000 14 0.000000 -6.000000 15 0.000000 -2.000000由以上结果可以清楚的看到由各仓库到各客户处的货物调运数量,由此得出的符合条件的最佳运货方案,而使运费最低,最低为664。

Lingo的基本应用

Lingo的基本应用

第十五章Lingo的基本应用1、LINDO和LINGO软件能求解的模型:2、Lingo初级语法:语句分行书写,顺序与数学模型一致;每一条语句都要以“;”结尾;语句不区分大小写,书写方式与代数函数相近;目标函数以“min=”或者“max=”表示;注释语句用“!”开头;“>”和“>=”以及“<”和“<=”没有区别;如果不写明决策变量的取值范围,则默认为非负实数。

3、线性规划案例:生产计划每天:50桶牛奶时间480小时至多加工100公斤A1 要求:制订生产计划,使每天获利最大1)奶制品生产的Lingo模型2)Lingo求解2)Lingo求解报告//结果报告(Solution Report)4)开启灵敏度分析(Range)功能5)查看灵敏度分析(Range)必须先求解才能得到灵敏度分析报告//目标函数系数范围分析当目标函数中x1的系数(产品A1的收益)增加不超过8个单位或者减少不超过2.66667个单位时(x2系数维持不变),不需改变生产计划。

//约束条件右边值灵敏度分析如果牛奶资源的数量增加不超过10桶或者减少不超过6.666667桶(其他模型参数不变),则它将仍然作为紧缺资源;如果A1生产资源减少超过40个单位(其他模型参数不变),则它将转化为紧缺资源。

4、城市垃圾处理问题(最小吨*公里)小区供水问题(最大供水收益)代数式线性规划模型(垃圾运输)代数式线性规划模型(小区供水)5、如何表示具有下标的变量:1)从C语言的类比来理解:2)具有下标的变量可以看作某种数组变量中的元素;3)除去下标后的符号可以看作是数组变量的名称;4)下标可以看作是在数组中的索引值;5)单下标变量对应于一个一维数组,称为“简单集合”;6)多下标变量对应于一个多维数组,而多维数组可以看作是多个一维数组的笛卡尔积,称为“派生集合”。

6、Lingo中如何定义具有下标的变量?1)在Lingo中使用“集合变量”的形式表达规划模型中具有下标的变量2)定义集合变量需要三个基本要素:集合的名称集合的形式(简单集合还是派生集合?集合的元素个数是多少?)集合变量的名称7、定义简单集合的语法:集合名称/下标范围/: 变量列表;(变量之间用“,”分隔)例:brand/1..6/: a, b;(集合的名称是brand,/1..6/表示这种集合包含6个元素,下标的范围是从1到6,并且定义了两个这种集合形式的变量分别用a、b表示,该语句相当于定义了a1~a6以及b1~b6两组变量)例:type/1..4/;(也可以只定义集合形式不定义集合变量)8、定义派生集合的语法:集合名称(分量集合列表): 变量列表;1)分量集合列表分别对应于派生集合的每一个维度,定义了每一个维度分别属于哪一种简单集合2)例:product(brand, type): p, x;(集合的名称是product,该集合的第一个维度与brand集合的类型相同,第二个维度与type 集合的类型相同,并且定义了两个集合变量p和x。

Lingo的典型应用举例

Lingo的典型应用举例

假设预先准备的箱子总数为n个,即使每件物品单 独装一个箱子也够用,用决策变量yi=1或0表示第j个箱 子是用还是不用,用变量xij=1或0表示第i件物品是否放 入第j个箱子中,建立0-1规划模型如下:
n
min
z y j,
j1
n
w i x ij Cy
j , j 1,2 ,...,
n,
i1
s
表2.1 当前可供蔬菜养分含量(mg)和价格
养分
蔬菜

A1 青 豆 0.45
A2 胡萝卜 0.45
A3 花 菜 0.65
A4 卷心菜 0.4
A5 芹 菜 0.5
A6 土 豆 0.5
每周最低需求 6
每份蔬菜所含养分数量
每份价格
磷 维生素A 维生素C 烟酸 (元)
20
415
22
0.3
2.1
28
4065
例2.1 某疗养院营养师要为某类病人拟定本周蔬菜类菜单, 当前可供选择的蔬菜品种、价格和营养成分含量,以及病 人所需养分的最低数量见表2.1所示。病人每周需14份蔬 菜,为了口味的原因,规定一周内的卷心菜不多于2份, 胡萝卜不多于3份,其他蔬菜不多于4份且至少一份。在满 足要求的前提下,制订费用最少的一周菜单方案。
.t
.
n
x ij 1 , i 1 , 2 ,...,
n,
j1
yj x ij
0或 0或
1, j 1, i,
j
1,2 ,..., n , 1,2 ,..., n .
例5.1 已知30个物品,其中6个长0.51m,6个长 0.27m,6个长0.26m,余下的12个长0.23m,箱子长为 1m。问最少需要多少个箱子才能把30个物品全部装进箱 子。

用LINGO求解线性规划的例子

用LINGO求解线性规划的例子

附1:用LINGO求解线性规划的例子一奶制品加工厂用牛奶生产A1、A2两种奶制品,1桶牛奶可以在设备甲上用12小时加工成3公斤A1,或者在设备乙上用8小时加工成4公斤A2。

根据市场需求,生产的A1、A2能全部售出,且每公斤A1获利24元,每公斤A2获利16元。

现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时间为480小时,并且设备甲每天至多能加工100公斤A1,设备乙的加工能力没有限制。

试为该厂制定一个生产计划,使每天获利最大,并进一步讨论以下3个附加问题:1)若用35元可以购买到1桶牛奶,应否作这项投资?若投资,每天最多购买多少桶牛奶?2)若可以聘用临时工人以增加劳动时间,付给临时工人的工资最多是每小时几元?3)由于市场需求变化,每公斤A1的获利增加到30元,应否改变生产计划?数学模型:设每天用x1桶牛奶生产A1 ,用x2桶牛奶生产A2目标函数:设每天获利为z元。

x1桶牛奶可生产3x1公斤A1,获利24*3x1,x2桶牛奶可生产4*x2公斤A2,获利16*4x2,故z=72x1+64x2约束条件:原料供应:生产A1、A2的原料(牛奶)总量不超过每天的供应50桶,即x1+x2≤50劳动时间:生产A1、A2的总加工时间不超过每天正式工人总的劳动时间480小时,即12x1+8x2≤480设备能力:A1的产量不得超过设备甲每天的加工能力100小时,即3x1≤100非负约束:x1、x2均不能为负值,即x1≥0,x2≥0综上所述可得max z=72x1+64x2s.t.x1+x2≤5012x1+8x2≤4803x1≤100x1≥0,x2≥0显然,目标函数和约束条件都是线性的,这是一个线性规划(LP),求出的最优解将给出使净利润最大的生产计划,要讨论的问题需要考虑参数的变化对最优解和影响,一般称为敏感性(或灵敏度)分析。

LINGO求解线性规划用LINGO求解线性规划时,首先在LINGO软件的模型窗口输入一个LP模型,模型以MAX或MIN 开始,按线性规划问题的自然形式输入(见下面例子所示)。

Lingo软件应用举例

Lingo软件应用举例

Lingo 软件应用举例1. 简单的优化问题---- Lingo 软件的体验1.1 线性规划及线性整数规划例1. 在LINGO 中求解如下问题(线性规划):0,6002100350..32min 212112121≥≤+≥≥++x x x x x x x t s x x %----------------------------------------------------------其LINGO 代码如下:min =2*x1+3*x2;x1+x2>=350;x1>=100;2*x1+x2<=600;说明:(1) 在这里之所以没有对x1和x2进行非负的限制,是由于在默认情况下,Lingo 规定变量取非负实数(即非负要求,取值连续)(2) 若要求取整数,则函数@gin(x)限定x 取值为整数;(3) 若要求无约束,则函数@free(x)取消x 默认下界为0的限制,使x 可以取任意实数;(4) 若要求取非正数,则函数@bnd(L,x,U)可以限定L ≤x ≤U 。

%----------------------------------------------------------计算结果:Global optimal solution found at iteration: 2Objective value: 800.0000Variable Value Reduced CostX1 250.0000 0.000000X2 100.0000 0.000000Row Slack or Surplus Dual Price1 800.0000 -1.0000002 0.000000 -4.0000003 150.0000 0.0000004 0.000000 1.000000结果的解释:(1) “Global optimal solution found at iteration: 2”表示2次迭代后得到全局最优解。

Lingo的典型应用举例

Lingo的典型应用举例
1 3
4
A
2
3
4
5
6
7
8
9
10
料场的位置用(pxj,pyj)表示,日存储量用gj表示, 从料场j向工地i的日运输量为Cij。 则对问题(1), pxj,pyj是已知数,决策变量是Cij。 料场j到工地i的距离为:
( px j xi ) 2 + ( py j yi ) 2
目标函数是总的吨千米数最小,约束条件有两个。 一是满足各工地的日需求,二是各料场的总出货量不超 过日存储量。建立数学模型如下:
当前可供蔬菜养分含量( ) 表2.1 当前可供蔬菜养分含量(mg)和价格
养分 蔬菜 A1 A2 A3 A4 A5 A6 青 豆 胡萝卜 花 菜 卷心菜 芹 菜 土 豆 铁 0.45 0.45 0.65 0.4 0.5 0.5 6 每份蔬菜所含养分数量 磷 20 28 40 25 26 75 125 维生素A 维生素 维生素C 维生素 415 4065 850 75 76 235 12500 22 5 43 27 48 8 345 烟酸 0.3 0.35 0.6 0.2 0.4 0.6 5 每份价格 (元) 2.1 1.0 1.8 1.2 2.0 1.2
用0-1变量xij表示分配情况,xij=1表示指派第i个人 完成第j项任务,xij=0表示不分配。则上述问题可以表示 为如下0-1线性规划:
min
z = ∑∑ cij xij ,
i =1 j =1
n
n
n ∑ xij = 1, j = 1,2,..., n, i =1 s.t. n x = 1, i = 1,2,..., n, x = 0或1. ij ∑ ij j =1
min
z = ∑∑ Cij ( px j xi ) + ( py j yi ) ,

全国数学建模lingo实例讲解

全国数学建模lingo实例讲解

全国数学建模lingo 实例讲解LINGO 是用来求解线性和非线性优化问题的简易工具。

LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。

§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。

在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。

下面举两个例子。

例1.1 如何在LINGO 中求解如下的LP 问题:,6002100350..32min 212112121≥≤+≥≥++x x x x x x x t s x x在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100;2*x1+x2<=600;然后点击工具条上的按钮 即可。

例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。

产销单位运价如下表。

单位 销地 运 价 产地B 1 B 2 B 3 B 4 B 5 B 6 B 7 B 8 产量 A 1 6 2 6 7 4 2 5 9 60 A 24953858255A3 5 2 1 9 7 4 3 3 51A4 7 6 7 3 9 2 7 1 43A5 2 3 9 5 7 2 6 5 41A6 5 5 2 2 8 1 4 3 52销量35 37 22 32 41 32 43 38使用LINGO软件,编制程序如下:model:!6发点8收点运输问题;sets:warehouses/wh1..wh6/: capacity;vendors/v1..v8/: demand;links(warehouses,vendors): cost, volume;endsets!目标函数;min=@sum(links: cost*volume);!需求约束;@for(vendors(J):@sum(warehouses(I): volume(I,J))=demand(J));!产量约束;@for(warehouses(I):@sum(vendors(J): volume(I,J))<=capacity(I));!这里是数据;data:capacity=60 55 51 43 41 52;demand=35 37 22 32 41 32 43 38;cost=6 2 6 7 4 2 9 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddataend然后点击工具条上的按钮即可。

lingo用法

lingo用法

Lingo 是一种专门用于线性规划和整数规划的建模和求解语言。

它提供了一种简洁的方式来描述数学模型,并使用线性规划算法求解这些模型。

下面是Lingo 的一些基本用法示例:
1. 变量定义:
- 定义实数变量:`X = 0.5;`
- 定义整数变量:`INT_VAR Y;`
2. 目标函数定义:
- 最小化目标函数:`MIN = 2*X + 3*Y;`
- 最大化目标函数:`MAX = -X + 4*Y;`
3. 约束条件定义:
- 等式约束:`EQUATION C1: X + Y = 10;`
- 不等式约束:`INEQUATION C2: X >= 5;`
- 范围约束:`5 <= Y <= 20;`
4. 求解模型:
- 使用默认求解器求解:`SOLVE;`
- 指定求解器和参数:`SOLVE WITH LP_METHOD=3;` 以上是Lingo 的一些基本用法示例,实际上,Lingo 还提供了更多的功能和语法,用于描述更复杂的数学模型和问题。

它可以处理
线性规划、整数规划、混合整数规划等多种类型的问题,并提供了丰富的优化算法和工具来求解这些问题。

第四讲 LINGO编程举例及Options选项卡主要参数说明

第四讲  LINGO编程举例及Options选项卡主要参数说明

第四讲LINGO编程举例及Options选项卡主要参数说明一、LINGO编程举例例1水资源分配问题。

某水库可分配的水资源量为7个单位,分配给3个用户,各用户在分配一定单位水资源后产生的效益如下表所示,求最优分配方案。

水资源量 1 2 3 4 5 6 7用户1 5 15 40 80 90 95 100 用户2 5 15 40 60 70 73 75 用户3 4 26 40 45 50 51 53解用ijc表示上表所表示的效益矩阵,引入决策矩阵X表示水资源分配情况,其元素ijx的取值为0或1,1ijx=表示给用户i分配j单位水资源。

则目标函数是分配方案的总效益最大,约束条件用两条:①水资源总量7个单位;②每个用户得到的水资源量只能是从0到7共八个数字中的一个,即711, 1,2,3 ijjx i =≤=∑,等价于矩阵X的每行元素之和不能超过1。

于是建立本问题的0-1规划模型如下:3711713711max 1, 1,2,3,..7, 1,2,3,1,2,,7,01, 1,2,3,1,2,,7ij iji j ij j ij i j ij z c x x i s t j x i j x i j ======⎧≤=⎪⎪⎪⋅===⎨⎪⎪===⎪⎩∑∑∑∑∑或Global optimal solution found at iteration: 0 Objective value: 120.0000Variable Value Reduced CostX( 1, 1) 0.000000 -5.000000X( 1, 2) 0.000000 -15.00000X( 1, 3) 0.000000 -40.00000X( 1, 4) 1.000000 -80.00000X( 1, 5) 0.000000 -90.00000X( 1, 6) 0.000000 -95.00000X( 1, 7) 0.000000 -100.0000X( 2, 1) 0.000000 -5.000000X( 2, 2) 0.000000 -15.00000X( 2, 3) 1.000000 -40.00000X( 2, 4) 0.000000 -60.00000X( 2, 5) 0.000000 -70.00000X( 2, 6) 0.000000 -73.00000X( 2, 7) 0.000000 -75.00000X( 3, 1) 0.000000 -4.000000X( 3, 2) 0.000000 -26.00000X( 3, 3) 0.000000 -40.00000X( 3, 4) 0.000000 -45.00000X( 3, 5) 0.000000 -50.00000X( 3, 6) 0.000000 -51.00000例2旅行售货商(TSP )模型的一个实例有一个旅行售货商,从某个城市出发,要遍访若干城市各一次且仅一次,最后返回原出发城市(称能到每个城市一次且仅一次的路线为一个巡回)。

第四讲 LINGO编程举例及Options选项卡主要参数说明

第四讲  LINGO编程举例及Options选项卡主要参数说明

第四讲LINGO编程举例及Options选项卡主要参数说明一、LINGO编程举例例1水资源分配问题。

某水库可分配的水资源量为7个单位,分配给3个用户,各用户在分配一定单位水资源后产生的效益如下表所示,求最优分配方案。

水资源量 1 2 3 4 5 6 7用户1 5 15 40 80 90 95 100 用户2 5 15 40 60 70 73 75 用户3 4 26 40 45 50 51 53解用ijc表示上表所表示的效益矩阵,引入决策矩阵X表示水资源分配情况,其元素ijx的取值为0或1,1ijx=表示给用户i分配j单位水资源。

则目标函数是分配方案的总效益最大,约束条件用两条:①水资源总量7个单位;②每个用户得到的水资源量只能是从0到7共八个数字中的一个,即711, 1,2,3 ijjx i =≤=∑,等价于矩阵X的每行元素之和不能超过1。

于是建立本问题的0-1规划模型如下:3711713711max 1, 1,2,3,..7, 1,2,3,1,2,,7,01, 1,2,3,1,2,,7ij iji j ij j ij i j ij z c x x i s t j x i j x i j ======⎧≤=⎪⎪⎪⋅===⎨⎪⎪===⎪⎩∑∑∑∑∑或Global optimal solution found at iteration: 0 Objective value: 120.0000Variable Value Reduced CostX( 1, 1) 0.000000 -5.000000X( 1, 2) 0.000000 -15.00000X( 1, 3) 0.000000 -40.00000X( 1, 4) 1.000000 -80.00000X( 1, 5) 0.000000 -90.00000X( 1, 6) 0.000000 -95.00000X( 1, 7) 0.000000 -100.0000X( 2, 1) 0.000000 -5.000000X( 2, 2) 0.000000 -15.00000X( 2, 3) 1.000000 -40.00000X( 2, 4) 0.000000 -60.00000X( 2, 5) 0.000000 -70.00000X( 2, 6) 0.000000 -73.00000X( 2, 7) 0.000000 -75.00000X( 3, 1) 0.000000 -4.000000X( 3, 2) 0.000000 -26.00000X( 3, 3) 0.000000 -40.00000X( 3, 4) 0.000000 -45.00000X( 3, 5) 0.000000 -50.00000X( 3, 6) 0.000000 -51.00000例2旅行售货商(TSP )模型的一个实例有一个旅行售货商,从某个城市出发,要遍访若干城市各一次且仅一次,最后返回原出发城市(称能到每个城市一次且仅一次的路线为一个巡回)。

LINGO的一个小例子及相关解释

LINGO的一个小例子及相关解释

LINGO的一个小例子及相关解释北航:孔继利第一部分:在LINGO Model窗口,键入如下的最优化模型:!目标函数;max=100*x+150*y;!约束条件;x<=80;y<=100;x*2+y<=180;1.从中可以看出,最优化模型包含三个要素:目标函数、变量、约束。

2.在LINGO的模型中,每一行都必须要用一个分号结尾。

如果没有这些分号,模型将无法求解。

3. LINGO模型的一个表达式可以分几行输入,但是表达式必须用一个分号结束。

如:max=100*x+150*y;4.在LINGO中为了提高模型的可读性,需要增加注释。

注释以“!”开始,以“;”结束。

5. LINGO不区分字母的大小写。

6. LINGO中的变量名都必须用字母A~Z开始,接下来是其他字符、数字或底线。

第二部分:点击“solve”按钮,在编译不出错的情况下,将给出“求解状态窗口”和“模型解答报告”。

该模型的“求解状态窗口”的如下图:其中,变量框(Variables)显示的是变量的总数。

它也显示非线性变量和整数变量的个数。

一般,非线性变量和整数变量的个数越多,求解越困难,耗费的时间越多。

模型中变量的数目不包含取定值的变量。

约束框(Constraints)显示的是模型约束的总数和非线性约束的总数。

非零框(Nonzeros)显示的是模型中非零系数的总数和非线性变量中非零系数的总数。

内存显示框(Memory Used)显示正在使用的模型所需的内存大小。

耗用时间框(Elapsed Runtime)显示用于编译和求解模型所需的时间。

最优状态框(Optimizer Status)显示最优解得状态。

State(状态):给出现行解的状态。

可能的结果有“全局最优解”、“局部最优解”、“可行解”、“不可行解”、“无界解”、“中断”和“未定”。

Iterations(跌代):求解的跌代次数。

Infeasibility(不可行):矛盾约束的数目。

lingo教程(有样例)

lingo教程(有样例)

Lingo 模型Lingo 是较好的最优化建模工具(详细使用说明见Lingo模型参考),Lingo 模型由两部分组成:(一) 目标(objective):最优化目标。

(二)限制条件(constraint). (下载网址:)1.我的食谱由四种食品组成:,果仁巧克力,冰淇淋,可乐,奶酪.一块果仁巧克力价格为50 美分,一杯冰淇淋价格为20美分, 一瓶可乐价格为30美分, 一快奶酪价格为80美分.我每天的营养最低需求: 500 卡路里,6 盎司巧克力,10 盎司〔讲评〕师:该问题的目标是什么?生:食谱中饮食的成本最低师:限制条件?生:满足每天卡路里,巧克力,糖,脂肪的最低需求师:选择哪些变量?生:果仁巧克力,冰淇淋,可乐,奶酪的数量( 参考模型:lingo-LP1.lg4)讨论:如果巧克力冰淇淋的价格变为原来的两倍,食谱将如何改动?练习:1.1.你决意生产两种糖果:硬糖和软糖,糖果仅由糖,坚果,和巧克力制成.你现在有100盎司糖,20盎司坚果,30盎司巧克力.软糖须含有至少20%的坚果.硬糖须含有至少10%的坚果和10%的巧克力.一盎司的软糖售价为25美分, 一盎司的硬糖售价为20美分. 试安排生产计划( 参考模型:lingo-LP1-1.lg4)1.2.某公司生产 A, B, C 三种产品,售价分别为: A, $10;B,$56;C,$100.生产一单位A,需1小时的劳力; 生产一单位 B,需2小时的劳力加上2单位的A; 生产一单位 C,需3小时的劳力加上1单位的B.现有40小时的劳力, 试安排生产计划.( 参考模型:lingo-LP1-2.lg4)2.Donovan公司生产一种电子产品.已知明年四季度的需求(须按时交货):季度1,4000件; 季度2,2000件; 季度3,3000件; 季度4,10000件;公司员工每年有一个季度休假,每个员工年薪为$30,000,每季度最多可生产500件产品.每个季度末公司须为每件存货付存储费$30.公司现有600件产品,如何安排明年的生产?〔讲评〕师:该问题的目标是什么?生:员工年薪与存储费总和最低师:限制条件?生:每季度初的库存与该季度生产量的和须满足该季度的需求师:如何表示员工总数?生甲:各季度上班的员工x(1),x(2),x(3),x(4)总和生乙:甲的总和是员工总数的3倍,因为每个员工工作3个季度。

LINGO模型实例及求解

LINGO模型实例及求解

LINGO求解整数非线性规划模型
Local optimal solution found at
iteration: 12211
Objective value:
28.00000
Variable Value Reduced Cost
X1 10.00000
0.000000
X2 10.00000
2.000000
当余料没有用处时,通常以总根数最少为目标
钢管下料问题2
增加一种需求:5米10根;切割模式不超过3种。
现有4种需求:4米50根,5米10根,6米20根,8米 15根,用枚举法确定合理切割模式,过于复杂。
对大规模问题,用模型的约束条件界定合理模式
决策变量 (15维) xi ~按第i 种模式切割的原料钢管根数(i=1,2,3) r1i, r2i, r3i, r4i ~ 第i 种切割模式下,每根原料钢管 生产4米、5米、6米和8米长的钢管的数量
每根原料钢管切割成2某人打算外出旅游并登山路程比较远途中要坐火车和飞机考虑要带许多必要的旅游和生活用品例如照相机摄像机食品衣服雨具书籍等等共n件物品重量分别为a而受航空行李重量限制以及个人体力所限能带的行李总重量为bn件物品的总重量超过了b需要裁减该旅行者为了决策带哪些物品对这些物品的重要性进行了量化用c表示试建立该问题的数学模型
4 x1 3 x22 x3x4x550最优解:x2=15,
x22x4x53x620 x5=5, x7=5,
x3x52x715
其余为0;
xi 为整数
最优值:25。
按模式2切割15根, 与目标1的结果“共切割
按模式5切割5根, 27根,余料27米” 相比
按模式7切割5根, 共25根,余料35米 虽余料增加8米,但减少了2根

lingo例题

lingo例题

LINGO是一个用于求解线性规划问题的优化软件。

以下是一个简单的LINGO例题:
问题描述:
某公司生产A、B两种产品,生产A产品需要10个单位劳动力和2个单位资本,生产B产品需要15个单位劳动力和3个单位资本。

该公司拥有劳动力200个单位和资本150个单位。

A产品的售价为20元,B产品的售价为30元。

目标:最大化总收入。

约束条件:
1.劳动力不超过200个单位。

2.资本不超过150个单位。

3.A产品的产量为整数。

4.B产品的产量为整数。

使用LINGO求解该问题,可以建立以下模型:
目标函数:最大化总收入
@max=20x+30y; // 总收入等于A产品售价乘以A产品产量加上B产品售价乘以B产品产量
约束条件:
@bin(x); // A产品产量为整数
@bin(y); // B产品产量为整数
10x+15y<=200; // 劳动力不超过200个单位
2x+3y<=150; // 资本不超过150个单位
x>=0; // A产品产量非负
y>=0; // B产品产量非负
在LINGO中输入以上模型,即可求解该问题。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

location2
Lingo程序入门
LINGO模型的构成:4个段
集合段(SETS ENDSETS)
数据段(DATA ENDDATA)
LP:移到数据段
初始段(INIT ENDINIT)
目标与 约束段
局部最优:89.8835(吨公里 )
Lingo程序入门
Lingo举例
例4:匹配问题 某班8名同学准备分成4个调查队(每队两人)前往四个地区进行
高 ﹣(取反) ^ ﹡/
低 ﹢﹣
Lingo程序入门
(2)逻辑运算符 #not# 否定该操作数的逻辑值,#not#是一个一元运算符 #eq# 若两个运算数相等,则为true;否则为flase #ne# 若两个运算符不相等,则为true;否则为flase #gt# 若左边的运算符严格大于右边的运算符,则为true;否则为flase #ge# 若左边的运算符大于或等于右边的运算符,则为true;否则为flase #lt# 若左边的运算符严格小于右边的运算符,则为true;否则为flase #le# 若左边的运算符小于或等于右边的运算符,则为true;否则为flase #and# 仅当两个参数都为true时,结果为true;否则为flase #or# 仅当两个参数都为false时,结果为false;否则为true 这些运算符的优先级由高到低为:
c=0.02 0.07 0.04 0.03 0.05;
b=7 3 10; enddata
5 i 1
ci
xi
5 i 1
Aji
xi
bj ,
j
1, 2, 3
min=@sum(feed(i):c(i)*x(i)); !定义目标函数并求最小化问题
@for(nutr( j):@sum(feed(i):a( j,i)*x(i))>=b( j)); !定义约束条件
26
min
cij[(x j ai )2 ( y j bi )2 ]1/2
j1 i1
决策变量:
2
s.t.
cij di , i 1,..., 6
j 1
ci j,(xj,yj)~16维
6
cij ej , j 1, 2
i 1
非线性规划模型
cij 0, i 1,..., 6, j 1, 2
endcalc
5
3
C ij X ij
i1
j 1
min=@sum(mat(i,j):c(i,j)*x(i,j)); !定义目标函数
3
X ij si , j 1
i 1, 2, ..., 5
@for(base(i):@sum(super( j):x(i,j))<s(i)); !定义约束条件
i 1 2 3 45 6
a 1.25 8.75 0.5 5.75 3 7.25
b 1.25 0.75 4.75 5 6.5 7.75
d3
5
4
7
6
11
假设:料场 和工地之间 有直线道路
两个料场的日供应量均为20吨。
目标:需要确定料场位置(xj,yj)和运量cij ,使总吨 公里数最小。
Lingo程序入门
endsets 可以将setname1类型的变量看成一个n维向量,setname2类型的变量看 成一个m维向量,而将setname类型的变量看成一个n行m列的矩阵。
Lingo程序入门
(2)数据部分:这部分以“data:”开始,以“enddata”结束 ,其作用是对集合段定义的部分变量进行赋值。
(3)初始化部分:这部分以“init:”开始,以“endinit”结束 ,作用是为决策变量赋初始值。
5
X ij d j ,
i 1
@for(super( j):@sum(base(i):x(i,j))=d( j));
end
j 1, 2, 3
Lingo程序入门
(1)算术运算符 算术运算符是针对数值进行操作的。Lingo提供了5种二元运算符: ^幂 ﹡乘 /除 ﹢加 ﹣减 Lingo唯一的一元算术运算符是取反函数“﹣”。 这些运算符的优先级由高到底为:
Lingo程序入门
(2)集合函数 @max(setname: expression): 返回集合上表达式的最大值。 @min(setname: expression): 返回集合上表达式的最小值。 @sum(setname: expression): 返回集合上表达式的和。 @size(setname): 返回集合setname的维数。 @in(setname, set-element): 如果set-element属于setname,返回1,否则返回0。
Lingo程序入门
model: sets:
base/1..5/:xb,yb,s; super/1..3/:xs,ys,d; mat(base,super):c,x; endsets data: xb=2.1 8 5 1.3 7.7; yb=9 7.5 5.2 1.7 0.9; s=7 14 5 9 19; xs=5 2 8; ys=8 4 2.5; d=28 15 9; enddata
数学规划
—— Lingo及举例
重庆大学数学与统计学院
Lingo及举例
Lingo在计算上面不如matlab方便,但是对于各种各样的 数学规划问题,有许多优势,特别是非线性的整数规划问题。 因为我们经常遇到整数规范问题,并且还是非线性的,这时使 用Lingo几乎是唯一选择。
本课件的主要任务有两个:一个是学会简单规划问题的 Lingo代码的编写,另一个是进一步展示一些建模的技巧。
Lingo程序入门
(1)常用数学函数 @abs(x):返回变量x的绝对值。 @cos(x):返回变量x的余弦,其中x的单位是弧度。 @exp(x):返回值ex,其中e=2.71828。 @floor(x):对变量x向0方向取整。 @lgm(x):返回伽马函数的自然对数。 @log(x) :返回变量x的自然对数。 @sign(x) :返回变量x的符号值。 @sin(x) :返回变量x的正弦,其中x的单位是弧度。 @smax(x1,x2,..,xn) :返回变量x1, x2, ..., xn的最大值。 @smin(x1,x2,..,xn) :返回变量x1, x2, ..., xn的最小值。 @tan(x) :返回变量x的正切,其中x的单位是弧度。
xi 0, (i 1, 2,3, 4,5)
min cTx s.t. Ax≥b
x≥0
Lingo程序入门
model: sets:
feed/1..5/:x,c; nutr/1..3/: b; mat(nutr,feed):a; endsets data:
!程序以”model:” 开始 !从”sets:”到“endsets”是集合段
!程序以”model:” 开始 !从”sets:”到“endsets”是集合段 !定义集合的类型和变量
!使用前面的集合定义派生集合
!从”data:”到“enddata”是数据段
Lingo程序入门
calc:
!从”calc:”到“endcalc”是计算段
@for(mat(i,j):c(i,j)=((yb(i)-ys( j))^2+(xb(i)-xs( j))^2)^0.5);
(3)变量界定函数 @bnd(L,x,U):限制x的取值在L和U之间。 @bin(x):限制x的取值为1或0。 @free(x): x的取值范围为全体实数。 @gin(x):限制x的取值为整数值。
Lingo程序入门
例3:选址问题
某公司有6个建筑工地,位置坐标为(ai, bi) (单位:公
里),水泥日用量di (单位:吨)
Lingo程序入门
Lingo模型以“model:”开始,以“end”结束,中间主要包 括集合部分、数据部分、初始化部分、计算部分和目标与约束部分。
(1)集合部分:这部分以“sets:”开始,以“endsets”结束。 该部分的作用是定义必要的变量。基本格式如下:
sets: setname/menber1..menbern/:variable1,variable2;
endsets
Lingo程序入门
这一类数据类型(集合)为原始集合,可以进一步定义派生集合,比 如
sets: setname1/menber1..menbern/:variable1; setname2/element1..elementm/:variable2; setname(setname1,setname2):varibale;
社会调查,假设这8位同学两两之间组队的效率如表所示(由于对称性, 只列出严格上三角部分),问如何组队可以使总效率最高?
s1
s2
s3
s4
s5
s6
s7
s8
s1
9
3
4
2
1
5
6
s2
1
7
3
5
2
1
s3
4
4
2
9
2
s4
1
5
5
2
s5
8
7
6
s6
2
3
s7
4
Lingo举例
将效率矩阵记为benefit,用match(si,sj)=1表示同学si和同学 sj组成一个队,而match(si,sj)=0表示不组队,由对称性,只 考虑i<j共28个0-1变量。
#not# #eq# #ne# #gt# #ge# #lt# #le# #and# #or#
Lingo程序入门
(3)关系运算符 Lingo有三种关系运算符:“=”、“<=”和“>=”。 三类操作符的优先级: 高 #not# ﹣(取反)
相关文档
最新文档