视频链接
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中事先定义好