Lingo求解简单的整数规划


前言

lingo的全称是Linear Interactive and General Optimizer,是美国LINDO系统公司推出的一个求解规划问题的软件,在求解规划问题上lingo方便、全面且有效。本文以一个简单的整数规划问题为例,建立了整数规划的数学模型,采用lingo编程求解出了最优解以及最优解时的装配方案,介绍了规划问题的建模方法和lingo求解。


一、问题&数据

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

二、分析&思路

这是一个简单的整数规划问题,理清变量和限制条件是求解问题的关键。把7种不同厚度、重量和数量的包装箱放在2节相同的平板车上,在尽可能都放完上的前提下,要求平板车浪费的空间最小。包装箱放入平板车有若干种装配方案,由于有7种包装箱和3个变量(厚度、重量和数量)难以用枚举法列出所有方案,另外运用运筹学的求解方法极为困难和复杂,因此采用lingo或其他编程求解是最佳的选择。建立数学模型时首先要理清每个量以及量与量之间的数学关系从而找准决策变量和目标函数;其次要细致地分析题意,全面地罗列出约束条件。lingo编程则采用通用的四段式(集合段,数据段、目标函数和约束条件。

三、数学建模

1.假设简化

由于每个包装箱的长和宽都是一个相同的值,建模过程中空间关系只需考虑厚度,又由问题可知包装箱在平板车的摆放方式,所以空间问题可以简化为一维的切割问题,关于空间关系有如下假设:
a.假设包装箱之间的缝隙可以忽略不计。
b.包装箱按照问题中图示方法在平板车上排列。
c.每一辆平板车只能放置一排包装箱。

2.决策变量

用i计数平板车, i = 1 , 2 i=1,2 i=1,2;用j技术包装箱种类, j = 1 , 2 , . . . , 7 j=1,2,...,7 j=1,2,...,7。设装配时第i量平板车上装有第j种包装箱的数量为 m i j m_{ij} mij m i j m_{ij} mij即为模型的决策变量。另外根据题目归纳出的变量如下:
a. n j n_j nj(第 j j j种包装箱的数量,单位为件)
b. w j w_j wj(第 j j j种包装箱的质量,单位统一为吨(t))
c. t j t_j tj(第 j j j种包装箱的厚度,单位统一为米(m))

3.目标函数

节省的空间=总的空间-包装箱占有的空间
设节省的空间为 T T T,即: m i n T = 20.4 − ∑ i = 1 2 ∑ j = 1 7 t j m i j min T=20.4-\sum_{i=1}^ 2\sum_{j=1}^7t_jm_{ij} minT=20.4i=12j=17tjmij

4.约束条件

a.每一种包装箱尽可能放入两个平板车,且两个平板车放的每种包装箱的数量和小于等于每种包装箱含有的数量,即:
∑ i = 1 2 m i j ≤ n j , j = 1 , 2... , 7 \sum_{i=1}^2m_{ij}\le n_j,j=1,2...,7 i=12mijnj,j=1,2...,7
b.由题意可知每节平板车有10.2m的地方装包装箱,即每节平板车所装的包装箱厚度之和不能大于10.2m:
∑ j = 1 7 t j m i j ≤ 10.2 , i = 1 , 2 \sum_{j=1}^7t_jm_{ij}\le 10.2,i=1,2 j=17tjmij10.2,i=1,2
c.由题意可知每节平板车限重40t,表述为:
∑ j = 1 7 w j m i j ≤ 40 , i = 1 , 2 \sum_{j=1}^7w_jm_{ij}\le 40,i=1,2 j=17wjmij40,i=1,2
d.对于C5、C6、C7类包装箱,在每节平板车上所占总空间(厚度)不得大于3.027m,则有:
∑ j = 5 7 t j m i j ≤ 3.027 , i = 1 , 2 \sum_{j=5}^7t_jm_{ij}\le 3.027,i=1,2 j=57tjmij3.027,i=1,2

四、编程求解

lingo程序分为四段,第一段根据题目和模型设立集合,第二段根据题目条件代入数据,第三段根据模型编写的求解目标,第四段是约束条件程序。进行多次实验和迭代最终得到一种最优装配方案,具体过程和结果见下。

1.lingo程序

lingo代码如下:

sets:
C/1..7/:t,w,m1,m2,n,mt;
endsets

data:
t = 0.487,0.520,0.613,0.720,0.487,0.520,0.640;
w = 2,3,1,5,4,2,1;
n = 8,7,9,6,6,4,8;
enddata

min = 20.40 - @sum(C(j):t(j)*(m1(j)+m2(j)));

@for(C(j):mt(j)=m1(j)+m2(j));
@for(C(j):mt(j)<=n(j));
10.20 - @sum(C(j):t(j)*m1(j)) >= 0;
10.20 - @sum(C(j):t(j)*m2(j)) >= 0;
@sum(C(j):w(j)*m1(j))<=40;
@sum(C(j):w(j)*m2(j))<=40;
@sum(C(j)|j#GE#5#AND#j#LE#7:(m1(j)+m2(j))*t(j)) <= 3.027;
@for(C(j):@bnd(0,mt(j),n(j)));
@for(C(j):@gin(m1(j)));
@for(C(j):@gin(m2(j)));

2.求解结果

求解过程描述如下:在这里插入图片描述

最终求解出的最小浪费空间为0.467m。所对应的装配方案如下表:在这里插入图片描述
表中的数据即为最优解下决策变量的值 m i j m_{ij} mij

五、总结

建立规划问题的数学模型的要点在于找准决策变量,确定目标函数,理清约束条件,而lingo编程求解规划问题关键在于集合段和约束段。本文中的整数规划问题较为简单和典型,尤其每个量之间的关系较为简单明了,约束的条件也比较明确。但是解决过程中也有不足之处,比如假设过于简单导致模型的适用范围不足,再比如模型求解中没有充分考虑每种包装箱尽可能放完的情况,这导致在求解的最优解下,存在有些包装箱没有放完或者根本没放的情况。作者水平有限,不足之处希望读者批评指正。

猜你喜欢

转载自blog.csdn.net/qq_52309639/article/details/114358633
今日推荐