lingo标准模型与编程(附习题)

来源:互联网 发布:java多线程实现三方式 编辑:程序博客网 时间:2024/06/08 14:18

lingo基本模型

  • 目标函数由“MAX=”或“MIN=”开头;
  • 模型以“MODEL:”开始,以“END”结束, 虽然可以省略, 为便于阅读
  • 限定变量取整数值的语句为“@GIN(vname)”, 0/1变量语句为“@BIN(vname)”; 读, 建议保留;
  • LINGO模型不区分大小写字母, 变量和行名由以字母开头的字母和数字组成, 不超过32个字符;
  • LINGO中函数调用一律用“@”开头, 常见的有非
    负限定函数“@FREE(vname)”, 变量取值范围限定函数“ @BND(a, vname, b)”
  • 语句是构成LINGO模型的基本单位, 每一条语句 必须以分号“;”结尾, 多行写成的一条语句, 最后 以分号“;”结束
  • 注释语句以“!”开始, 以“;”结束, 选“File|Save”保 存文件, 文件名的后缀为“.lg4”
    1. 对大规模数学规划,LINGO语言所建模型较简洁,语句不多;

    2. 模型易于扩展,因为@FOR、@SUM等语句并没有指定循环或求和的上下限,如果在集合定义部分增加集合成员的个数,则循环或求和自然扩展,不需要改动目标函数和约束条件;

    3. 数据初始化部分与其它部分语句分开,对同一模型用不同数据来计算时,只需改动数据部分即可,其它语句不变;

    4. “集合”是LINGO有特色的概念,它把实际问题中的事物与数学变量及常量联系起来,是实际问题到数学量的抽象,它比C语言中的数组用途更为广泛。

    5. 使用了集合以及@FOR、@SUM等集合操作函数以后可以用简洁的语句表达出常见的规划模型中的目标函数和约束条件,即使模型有大量决策变量和大量数据,组成模型的语句并不随之增加.

例一

线性整数规划
线性整数规划
model:

max=x1+x2;

x1+9/14*x2<=51/14;

-2*x1+x2<=1/3;

@gin(x1);@gin(x2);

end

求得x1=3,x2=1,最大值为4.运用matlab求时可以发现有两组解:x1=3,x2=1和x1=2,x2=2。通过验证也可知这两组解均满足。Lingo的一个缺陷是:每次只能输出最优解中的一个(有时不只一个)。那么,怎样求得其他解呢?一个办法是将求得的解作为约束条件,约束x1不等于3,x2不等于1,再求解。如下:

model:

max=x1+x2;

x1+9/14*x2<=51/14;

-2*x1+x2<=1/3;

@gin(x1);@gin(x2);

@abs(x1-3)>0.001;

@abs(x2-1)>0.001;

end

求得x1=2,x2=2.若再次排除这组解,发现Lingo解不出第三组解了,这时我们可以断定:此优化模型有两组解:

x1=3,x2=1和x1=2,x2=2.

求解模型时需注意:Lingo中,默认变量均为非负;输出的解可能是最优解中的一组,要判断、检验是否还有其他解(根据具体问题的解的情况或用排除已知最优解的约束条件法)。

习题

1

不能作为LINGO程序的变量名的是2_a

2

LINGO程序中,在集合段有以下定义:
Sets:
yuefen/1..4/:c,x,e,d,s;
endsets
在数据段c,e都有赋值,则下列语句会报告出错的是


@for(yuefen(i):s(i+1)=s(i)+x(i)-d(i));
2.00/2.00

min=@sum(yuefen:c*x+e*s);

s(1)=0;

s(4)+x(4)-d(4)=0;

3

在LINGO程序的目标与约束段,下列说法正确的是( )。
得分/总分

说明语句可以用中文对语句进行说明

取消非负限制的函数FREE( )

4

某工厂生产甲、乙、丙三种产品,单位产品所需工时分别为2、3、1个工时;单位产品所需原材料分别为3、1、5公斤;单位产品利润分别为2元、3元、5元。工厂每天可利用的工时为12个,可供应的原材料为15公斤。若产品必须为整数单位,则最大利润可为( )。19

infeasiable=state

原创粉丝点击