视频链接
lingo 零基础学习系列教程 初识LINGO_哔哩哔哩_bilibili
1.x1>1与x1>=1等价,不存在严格大于
2.求解线性规划,二次规划,部分非线性规划
二次规划定义如下

3.利用lingo,可以建立简单模型/基于集合的模型
4.集合的表示和运用是lingo的重点
5.lingo可以求出线性规划的解,发现无界解、无可行解,对于多重解只能给出一个解,无法提示该解释该解是多重解的一个。
6.简单模型,两部分:目标函数和约束条件
目标函数:min/max=表达式,不要写z
约束条件:变量的非负约束是默认约束,如果某些变量是负数约束,要显式写出来
注:乘号*不能省略;目标函数和约束条件的顺序没有要求

不写默认约束

不区分大小写
ctrl +滚轮向上,字号变大
注释以!开头
重点:基于集合的专业模型
三部分组成集合的专业模型
第一部分:集合定义部分
第二部分:数据定义部分
第三部分:目标函数与约束条件定义部分
!注释;
model:
sets:
endsets
data:
enddata
end
线性规划的三种形式
模型的一般形式:写到论文上的形式
向量形式--》矩阵形式



约束条件多,变量多
集合的运用表示













错误示例:

正确:







非线性规划采用全局求解器





数学函数












原始集合








此处集合有顺序





- model:
-
- sets:
- item/1..10/:weight,profit,x;
-
- endsets
-
- data:
- weight=6 3 4 5 1 2 3 5 4 2;
- profit=540 200 180 350 60 150 280 450 320 120;
- enddata
-
- max=@sum(item(i):profit(i)*x(i));
-
- @sum(item(i):weight(i)*x(i))<=30;
- @for(item(i):@bin(x(i)));
- end





起始只能从1开始



集合元素放到数据段中赋值








集合遍历函数





练习


- model:
-
- sets:
- item:weight,profit,x;
-
- endsets
-
- data:
- item weight profit=
- 1 6 540
- 2 3 200
- 3 4 180
- 4 5 350
- 5 1 60
- 6 2 150
- 7 3 280
- 8 5 450
- 9 4 320
- 10 2 120
- ;
-
- enddata
-
- max=@sum(item(i):profit(i)*x(i));
-
- @sum(item(i):weight(i)*x(i))<=30;
- @for(item(i):@bin(x(i)));
-
- totalw=@sum(item:weight);
- totalp=@sum(item:profit);
-
- sigma_x=@sum(item:x);
- sigma_w=@sum(item:weight*x);
- p=@prod(item:weight);
-
- max_w=@max(item:weight);
- min_w=@min(item:weight);
-
- max_p=@max(item:profit);
- min_p=@min(item:profit);
- end








- model:
- sets:
- A/1..10/:x;
- endsets
- @for(A(i)|i#le#5:x(i)=i^2);
- @for(A(i)|i#gt#5:x(i)=@sqrt(i));
- end


- model:
- sets:
- A/1..10/:x;
- endsets
- @for(A(i)|i#le#5:x(i)=i^2);
- @for(A(i)|i#gt#5:x(i)=@sqrt(i));
- p = @prod(A(i)|i#le#5:x(i));
- s = @sum(A(i)|i#gt#5:x(i)^2);
- end

逻辑表达式,不能用大于小于号,要用逻辑符号表示,逻辑表达式仅用于集合遍历和操作函数








lingo可以直接接收来自txt、excel的复制的数据






右键,定义名称

定义名称的数据是单个数据、向量、矩阵,分别选中即可,右键选择定义名称


另一种

以上是读取
下面包括写

读和写的数据块都要在excel中事先定义好
