文章目录
1 说明
- lingo适合于解线性规划问题,相比于lindo非线性规划也是可以解的,相比于matlab的
linprog(f,A,b,Aeq,beq,lb,ub)
更加直观方便。 - lingo中不区分大小写
2 变量范围限定符号
!注释
!每一句后面加分号
@bin(X); !限制变量"X" 为"0"或"1"
@bnd(L,X,U); !限制"L<=X<=U"
@free(X); ! 取消对变量的限制,默认>=0
@gin(X); !限制变量"X"为整数
3 简单例子
题目
代码
max=72*x1+64*x2;
x1+x2<=50;
12*x1+8*x2<=480;
3*x1<=100;
结果解释
4 常用概念
集
setname/member_list/:attribute_list
e.g:
sets:
demand/1..6/:a,b,d;
supply/1..2/:x,y,e;
!派生集,c(i,j);!i∈[1,6],j∈[1,2];
link(demand,supply):c;
endsets
数据赋值
data:
a=1.25,8.75,0.5,5.75,3,7.25;
b=1.25,0.75,4.75,5,6.5,7.75;
d=3,5,4,7,6,11;
e=20,20;
x,y=5,1,2,7;
enddata
初始部分(迭代从哪些初始值开始)
init:
endinit
5 函数
- 函数运算前面必须加
@
常用函数
部分函数使用方法
@for(vertex(i)|i#GT#1: L(i)=@min(road(j,i):L(j)+D(j,i))
sets:
w/1..6/:capacity;
v/1..8/:demand;
link(w,v):c,x;
endsets
data:
capacity=60 55 51 43 41 52;
demand= 35 37 22 32 41 32 43 38;
c=6 2 6 7 4 2 5 9
4 9 5 3 8 5 9 2
5 2 1 9 7 4 3 3
7 6 7 3 9 2 7 1
2 3 9 5 7 2 6 5
5 5 2 2 8 1 4 3;
enddata
min=@sum(link(i,j):c(i,j)*x(i,j));
@for(w(i): @sum(v(j): x(i,j)) <= capacity(i) );
@for(v(j): @sum(w(i): x(i,j)) = demand(j) );
6 模型构成几个阶段
- 目标与约束段
- 集合段(SETS ENDSETS)
- 数据段(DATA ENDDATA)
- 初始段(INIT ENDINIT)
- 计算段(CALC ENDCALC)
- 示例
MODEL:
Title Location Problem;
SETS:
ENDSETS
DATA:
ENDDATA
INIT
ENDINIT
!目标函数
!约束条件
!变量约束
END
7 引用excel中的数据,及变量数值导出到excel
- 数据保存在excel中,点击【公式】->【定义名称】,例如:
data
,选择这个名称表示的范围
- 设定规格相同的集
- 使用
variable=@ole("filepath","name");
name
可以是刚才定义的data
- 完整代码
sets:
example/1..4/:x;
endsets
data:
x=@ole("f:\\1.xls",'data');
enddata
- 导出到数据到
excel
,1-2变,3中改为@ole("filepath","name")=variable;