Lingo的基本应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十五章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。如果根据前面对brand和type的定义,product集合是一个6*4的二维派生集合,该语句相当于定义了p11~p64和x11~x64两组变量)
3)例:address(country, state, city)。
9、调用集合变量的语法:
1)变量名称(下标值)”的形式调用集合变量的指定元素:pi→p(i);xij→x(i,j);
例:p(4)、x(2,3)
集合变量最主要的作用是利用某些遍历集合元素的函数对数学函数进行简化表达
10、遍历集合变量的函数调用语法:
1)NGO中的函数都是“@函数名(参数)”的调用形式;
2)集合变量的函数参数必须遵循下述结构:
集合名称(下标定义): 集合变量操作的通用形式
例:@sum(brand(i): a(i)*b(i));(“@sum”是一种遍历集合变量的求和函数,该语句表示针对brand集合的a、b两个变量进行遍历的乘法操作并求和,用i表示通用形式的变量下标,如果根据前面对于brand的定义,该语句相当于:
11、常用的遍历集合变量函数:
1)@sum:遍历集合变量并求和
2)@for:遍历集合变量并执行指定操作
例:@for(brand(i):a(i)<5);
表示针对brand集合的变量a的每一个元素,都执行一个a(i)<5的约束,如果根据前面对于brand的定义,该语句相当于:
12、集合变量操作函数的注意事项:
1)参数结构“集合名称(下标变量): 通用操作”
2)参数中“:”左边的部分定义了特定下标符号所属的集合及其取值范围,右边的通用操作中必须使用已定义的下标符号
3)Lingo中函数是可以嵌套的,即参数结构中的“通用操作”部分可以是另一个函数。