Lingo 基础+实战

Lingo 基础知识

大佬博客(看这个就够了)

Lingo 实战一:(线性规划)

在这里插入图片描述

变量含义
( a i , b i ) (a_i,b_i) (ai,bi)工地 i i i 的坐标( i i i = 1…6)
( x i , y i ) (x_i,y_i) (xi,yi)料场 j j j 的坐标( j j j = 1,2)
c i j c_{i j} cij从料场 j j j 往工地 i i i 运输的水泥量 (所求)
z z z最小的吨千米数 (所求)
d i d_i di i i i 个工厂的日需求量
e j e_j ej j j j 个料场的总供应量

约束方程如下:
min ⁡ z = ∑ j = 1 2 ∑ i = 1 6 c i j ( x j − a i ) 2 + ( y j − b i ) 2 \min z=\sum_{j=1}^{2} \sum_{i=1}^{6} c_{i j} \sqrt{\left(x_{j}-a_{i}\right)^{2}+\left(y_{j}-b_{i}\right)^{2}} minz=j=12i=16cij(xjai)2+(yjbi)2
s . t { ∑ j = 1 2 c i j = d i , i = 1 , 2 , … , 6 ∑ i = 1 6 c i j ≤ e j , j = 1 , 2 s.t\left\{\begin{array}{l} \sum_{j=1}^{2} c_{i j}=d_{i}, i=1,2, \ldots, 6 \\ \sum_{i=1}^{6} c_{i j} \leq e_{j}, j=1,2 \end{array}\right. s.t{j=12cij=di,i=1,2,,6i=16cijej,j=1,2
Lingo 代码:

!集合的定义
sets:
S/1..6/:a,b,d;
T/1..2/:e,x,y;
U(S,T):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;
x=5 2;
y=1 7;
e=20 20;
enddata

!模型的式子
min = @sum(U(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));
@for(S(i):@sum(T(j):c(i,j))=d(i));
@for(T(j):@sum(S(i):c(i,j))<=e(j));

结果如下:
在这里插入图片描述 在这里插入图片描述
用 Lingo 求解为:
A 料场向工地1运送3吨,向工地2运送5吨,向工地3运送0吨,向工地4运送7吨,向工地5运送0吨,向工地6运送1吨
B 料场向工地1运送0吨,向工地2运送0吨,向工地3运送4吨,向工地4运送0吨,向工地5运送6吨,向工地6运送10吨
局部最优解为136.228

Lingo 实战二:(多目标规划)

在这里插入图片描述

变量含义
x 1 x_1 x1工厂每个月生产产品 A A A 吨数
x 2 x_2 x2工厂每个月生产产品 B B B 吨数

约束方程如下:
{ min ⁡ f 1 = 2 x 1 + 5 x 2 min ⁡ f 2 = 0.4 x 1 + 0.3 x 2  st.  { x 1 + x 2 ≥ 7 0 ≤ x 1 ≤ 5 0 ≤ x 2 ≤ 6 \left\{\begin{array}{l} \min f_{1}=2 x_{1}+5 x_{2} \\ \min f_{2}=0.4 x_{1}+0.3 x_{2} \\ \text { st. }\left\{\begin{array}{l} x_{1}+x_{2} \geq 7 \\ 0 \leq x_{1} \leq 5 \\ 0 \leq x_{2} \leq 6 \end{array}\right. \end{array}\right. minf1=2x1+5x2minf2=0.4x1+0.3x2 st. x1+x270x150x26
多目标规划 转换为 单目标规划:

下面我们将其转换为一个单目标规划问题,即对上面的两个目标函数进行加权。由于该工厂决策认为环境污染应优先考虑,因此我们可以选取 f 1 f_1 f1 f 2 f_2 f2 的权重分别为 0.4 和 0.6,注意到两个目标函数的单位不同,一个为"万元",一个为“吨”,因此我们需要首先对目标函数进行标准化来消除量纲的影响,然后再进行加权。由于题目中已经给了产品费用和污染量的参考值,因此我们将这两个目标函数分别除以其参考值来消除量纲。那么加权组合后的目标函数:
m i n    f = 0.4 × f 1 30 + 0.6 × f 2 2 = 0.4 30 × ( 2 x 1 + 5 x 2 ) + 0.6 2 × ( 0.4 x 1 + 0.3 x 2 ) min\;f=0.4 \times \frac{f_{1}}{30}+0.6 \times \frac{f_{2}}{2}=\frac{0.4}{30} \times\left(2 x_{1}+5 x_{2}\right)+\frac{0.6}{2} \times\left(0.4 x_{1}+0.3 x_{2}\right) minf=0.4×30f1+0.6×2f2=300.4×(2x1+5x2)+20.6×(0.4x1+0.3x2)
Lingo 代码:

!模型的式子
min = 0.4/30*(2*x1+5*x2)+0.6/2*(0.4*x1+0.3*x2);
x1+x2>7;
0<=x1;
x1<=5;
0<=x2;
x2<=6;

结果如下:
x 1 = 5 , x 2 = 2 , f 1 = 20 , f 2 = 2.6 x_{1}=5, \quad x_{2}=2, \quad f_{1}=20, \quad f_{2}=2.6 x1=5,x2=2,f1=20,f2=2.6

Lingo 其他知识

一、灵敏度分析
先在 Lingo 菜单 options 里面设置 general solver 的 dual computation 里面加上 ranges,
然后在 Lingo 菜单里面选 range 就行了(注意 Lingo 只能对线性的模型做灵敏度分析)

灵敏度分析报告

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lindo 和 Lingo 是美国 Lindo 系统公司开发的一套专门用于求解最优化问题的软件包。Lindo 用于求解线性规划和二次规划问题,Lingo 除了具有 Lindo 的全部功能外,还可以用于求解非线性规划问题,也可以用于一些线性和非线性方程(组)的求解,等等。Lindo 和 Lingo 软件的最大特色在于可以允许优化模型中的决策变量是整数(即整数规划),而且执行速度很快。   Lingo 实际上还是最优化问题的一种建模语言,包括许多常用的函数可供使用者建立优化模型时调用,并提供与其他数据文件(如文本文件、Excel电子表格文件、数据库文件等)的接口,易于方便地输入、求解和分析大规模最优化问题。   由于这些特点,Lindo系统公司的线性、非线性和整数规划求解程序已经被全世界数千万的公司用来做最大化利润和最小化成本的分析。应用的范围包含生产线规划、运输、财务金融、投资分配、资本预算、混合排程、库存管理、资源配置等等...   Lindo/Lingo 软件作为著名的专业优化软件,其功能比较强、计算效果比较好,与那些包含部分优化功能的非专业软件相比,通常具有明显的优势。此外,Lindo/Lingo 软件使用起来非常简便,很容易学会,在优化软件(尤其是运行于个人电脑上的优化软件)市场占有很大份额,在国外运筹学类的教科书中也被广泛用做教学软件。
1. 变量声明 在Lingo中,可以使用var来声明变量,例如: `var myVariable` 这会声明一个名称为myVariable的变量。 2. 变量赋值 可以使用等号将值分配给变量,例如: `myVariable = "Hello World"` 这会将字符串"Hello World"赋值给myVariable。 3. 数据类型 Lingo支持许多不同的数据类型,包括字符串、数字、布尔值、数组和对象。 4. 字符串 在Lingo中,字符串可以使用双引号或单引号来表示,例如: `myString = "Hello"` 或者 `myString = 'World'` 5. 数字 数字可以是整数或浮点数,例如: `myNumber = 10` 或 `myNumber = 3.14` 6. 布尔值 布尔值只有两个可能的值:true或false,例如: `myBoolean = true` 或 `myBoolean = false` 7. 数组 数组是一组值的集合,可以使用方括号来创建,例如: `myArray = [1, 2, 3, 4]` 8. 对象 对象是一组属性和方法的集合,可以使用大括号来创建,例如: ``` myObject = { name: "John", age: 30, sayHello: function() { alert("Hello!"); } } ``` 9. 函数 函数是一段可重复使用的代码,它接受参数并返回值。可以使用function关键字来声明函数,例如: ``` function myFunction(param1, param2) { return param1 + param2; } ``` 10. 控制流 Lingo支持if语句、for循环、while循环和switch语句等控制流结构。 11. 注释 注释是对代码的解释和说明,Lingo支持单行注释和多行注释。单行注释以两个斜杠(//)开头,多行注释以/*开头,以*/结尾。例如: ``` // This is a single-line comment /* This is a multi-line comment */ ``` 以上就是Lingo基础语法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值