Lingo初探

lingo可以解决大部分的规划类型的优化问题,并有语法结构简单等优势
摘要由CSDN通过智能技术生成

lingo真的是非常的银杏化,程序和语法结构简单,通过它我们可以解决大部分的规划类型的优化问题。

一.LINGO使用介绍

1.1 LINGO编写格式

LINGO模型以MODEL开始,以END结束.中间为语句,分为四大部分。不区分大小写。

(1)集合部分:定义决策变量

sets:

集合名称1/成员列表1/:属性1_1,属性1_2,…,属性1_n1;

集合名称2/成员列表2/:属性2_1,属性2_2,…,属性2_n2;

派生集合名称(集合名称1,集合名称2):属性3_1,…,属性3_n3;

endsets

Person/1..10/:A;
Task/1..12/:B;
Link(Person,Task):X;

 上面的属性可以看成是集合下包含的元素(成员),派生集合意思是矩阵,比如上面的那个就是10行12列矩阵

(2) 目标与约束:这部分定义了目标函数、约束条件等。 一般要用到 LINGO的内部函数。求解优化问题时,该部分是必须的

(3)数据部分(DATA):这部分以“DATA: ”开始,以“END DATA” 结束。其作用在于对集合的属性(数组)输入必要的数值

(4)初始化部分(INIT):这部分以“INIT: ”开始,以“END INIT”结 束。作用在于对集合的属性(数组)定义初值.格式为: attribute=value_list

注意事项:

1.Lingo中模型以“MODEL:”开始,以“END”结束,对于简单的模型,这两个语句都可以省略
2.Lingo中每行后面均增加了一个分号“;”
3.所有符号都需在英文状态下输入
4.min=函数、max=函数,表示求函数的最小、最大值
5.Lingo中变量不区分大小写,变量名可以超过8个,但不能超过32个,需以字母开头

6.用Lingo解优化模型时已假定所有变量非负,如果想解除这个限制可以用函数@free(x),这样x可以取到任意实数
7.变量可以放在约束条件右端,同时数字也可以放在约束条件左边
8.Lingo模型语句由一系列语句组成,每一个语句都必须以“;结尾
9.Lingo中以“!”开始的是说明语句,说明语句也以“;” 结束

10.Lingo中数据部分不能使用分式,例如数据部分不能使用1/3

11.Lingo中矩阵数据是逐行存储的,Matlab中数据是逐列存储的

是不是一头雾水看不懂,没事先往下看。

1.2 LINGO内部函数使用详解

LINGO建立优化模型时可以引用大量内部函数, 这些函数以“@”符号打头.

(1)常用数学函数

常用数学函数功能
@abs(x)返回变量X的绝对数值
@cos(x)返回X的余弦值,X的单位为弧度
@exp(x)返回指数函数值,其中e=2.72828…
@floor(x)向0靠近返回x的整数部分
@lgm(x)返回Γ函数的自然对数值
@log(x)返回变量x的自然对数值
@sgn(x)

返回变量X的符号值,当x<0时为-1,

当x>0时为1

@sin(x)返回x的正弦值,x的单位为弧度
@smax(x1,x2,...,xn)返回一列值x1, x2,..., xn的最大值
@smin(x1,x2,...,xn)返回一列值x1, x2,..., xn的最小值
@tan(x)返回x的正切值,x的单位为弧度

(2)集合函数

集合函数的用法如下: set_operator (set_name|condition:expression) 其中set_operator是集合函数名,set_name是数据集合名,expression 部分是表达式,|condition部分是条件,用逻辑表达式描述(无条件时可省略)。逻辑表达式中可以三种逻辑算符#AND#(与),#OR#(或),#NOT#(非) 和六种关系算符#EQ#(等于),#NE#(不等于),#GT#(大于),#GE# (大于等于),#LT#(小于),#LE#(小于等于)。

常见的集合函数功能
@for (set_name:constraint_expressions)对集合(set_name)的每个元素 独立地生成约束,约束由约束表达式(constraint_expressions)描述.
@max(set_name:expression)返回集合上表达式(expression)的最大值
@min(set_name:expression)返回集合上的表达式(expression)最小值
@sum(set_name:expression)返回集合上的表达式(expression)的和
@size(set_name)返回数据集set_name中包含元素的个数
@in(set_name,set_element)如果数据集set_name中包含元素 set_element 则返回1,否则返回0

 (3)变量界定函数 变量函数对变量的取值范围附加限制,共有四种.

@bnd(L,x,U)限制L≤x≤U
@bin(x)限制x为0或1
@free(x)取消对x的符号限制(可取任意实数值)
@gin(x)限制x为整数值

二、LINGO求解优化模型实例

1.01规划

model:
sets:
people/1..4/;
task/1..4/;
assign(people,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(i,j):a(i,j)*x(i,j));
@for(task(j):@sum(people(i):x(i,j))=1);
@for(people(i):@sum(task(j):x(i,j))=1);
@for(assign(i,j):@bin(x(i,j)));
end

2.整数规划

 

model:
sets:
product/1..3/:x,y;
endsets
max=3*x(1)+4*x(2)+8*x(3)-100*y(1)-150*y(2)-200*y(3);
2*x(1)+4*x(2)+8*x(3)<=500;
2*x(1)+3*x(2)+4*x(3)<=300;
x(1)+2*x(2)+3*x(3)<=100;
3*x(1)+5*x(2)+7*x(3)<=700;
@for(product:x<=150*y);
@for(product:@gin(x));
@for(product:@bin(y));
end

x1与x(1)变量是不一样的,使用for语句会使上面的变量与下面的变量不一致,所以还不如分式直接列出。

按下solve键后会弹出两个窗口

 上面圈出的表示代码运行的时间,几乎是在瞬间完成,这足以体现lingo内部程序的强大。

 了解以上后,我们学习其他的规划模型问题就比较容易了。

  • 9
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值