明天要进行数模比赛,今天晚上看了一些lingo的教程,整理成博客,有新的内容以后会添加。
Lingo作用
lingo对于一些线性或者非线性的规划,优化问题非常有效,在此不做展开。
Lingo基本用法
实际上lingo的操作需要建立在公式上,如果事先整理好公示以及约束条件,那么只需要转化成代码即可
公式非常重要!
接下来放些例题
例题一:

max=98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2; !目标函数;
!约束条件;
x1<=2*x2;
x1+x2<100;
@gin(x1);@gin(x2); !x1 x2非负整数
@gin()表示限制括号内参数为整数
这题很简单,看看即可。
最后会打印max。
这道例题可能不需要lingo,但是当数据量和约束条件复杂时,lingo能节省很多计算量。
例题二
建筑工地的位置(用平面坐标a,b表示,距离单位:公里)及水泥日用量d(吨)下表给出。有两个临时料场位于P (5,1), Q (2, 7),日储量各有20吨。从A, B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。两个新的料场应建在何处,节省的吨公里数有多大?


MODEL:
Title Location Problem;
sets:
demand/1..6/:a,b,d; !该集合对应着建筑工地,每一个建筑工地有两个坐标还有一个需求量,所以元素有三个;
supply/1..2/:x,y,e; !该集合对应着料场,元素是坐标与储存量;
link(demand,supply):c; !由上面的demand supply派生而成,可以认为现在link是一个6行(demand)2列(supply)的矩阵,
矩阵中元素的值代表着每一个建筑工地接受各个料场的具体水泥量;
endsets
data:
!locations for the demand(需求点的位置);
a=1.25,8.75,0.5,5.75,3,7.25;
b=1.25,0.75,4.75,5,6.5,7.75;
!quantities of the demand and supply(供需量);
d=3,5,4,7,6,11; e=20,20;
enddata
init:
!initial locations for the supply(初始点);
x,y=5,1,2,7;
endinit
!Objective function(目标);
min=@sum(link(i,j): c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2) ); !表示对link中所有元素即六行二列都进行此求和操作;
!demand constraints(需求约束);
@for(demand(i):@sum(supply(j):c(i,j)) =d(i);); !@sum里面表示对j进行循环用supply,@for表示对i进行循环用demand(i),
这里表示对所有的建筑工地,工地对应的的需求量等于各个草料场供给量的和;
!supply constraints(供应约束);
@for(supply(i):@sum(demand(j):c(j,i)) <=e(i); );
@for(supply: @bnd(0.5,X,8.75); @bnd(0.75,Y,7.75); ); !表示x, y的范围,@bnd(a, x, b): a <= x <= b;
END
这里介绍一个概念:集。
定义方法:
setname[/member_list/][:attribute_list];
注意:用“[]”表示该部分内容可选。
如: demand/1..6/:a,b,d;
这个概念类似于c的结构体,Java的类
demand为类名,a,b,d为属性。
具体可结合上面的例子分析。
注意事项
LINGO总是根据“MAX=”或“MIN=”寻找目标函数;
程序语句的顺序一般不重要,既可以随意调换;
程序运用函数时都是以@开头;
程序中的变量默认为非负数,想要改变变量类型必须有相应函数调整
程序中变量不区分大小写;
语句必须以分号结尾;
注释以!开始,且注释语句后面必须也有分号,注释默认注释到第一个分号处,意思是分号前面会全部被注释掉。
本篇博客来源这篇文章,如果想了解的更详细,可点击查看。
PS:我在复制粘贴代码运行时,发现注释即使格式正确,还是会有部分代码会被当成注释,建议删除注释运行。
这篇博客介绍了Lingo在数模比赛中的应用,主要用于解决线性或非线性规划问题。Lingo的基本用法包括建立公式和约束条件,并通过示例展示了如何用lingo解决实际问题。文章提到了Lingo的语法特点,如变量默认非负,变量不区分大小写,以及如何定义集等。最后,博主分享了在使用Lingo时的一些注意事项和资源链接。

916

被折叠的 条评论
为什么被折叠?



