File failed to load: https://cdn.jsdelivr.net/mathjax/2.7.0/extensions/MathZoom.js

Lingo解决最优化问题

1|0Lingo解决优化问题


@

1|1前言


前面,我们已经对Lingo有了一定的了解,但是要想真正的熟悉Lingo在解决优化问题中的强大之处,还需要不断加强相关训练,本文主要是使用Lingo来解决优化问题,该文的主要目的有以下三点:

  • 希望能够提升自己对Lingo的相关操作并加强对优化问题的思维模式
  • 方便日后对Lingo核心操作的回顾
  • 希望每一位到来的朋友能够有所收获

若您对Lingo的安装及基本操作不是很了解,可暂且移步:Lingo安装Lingo基本操作

1|2一、优化模型介绍


优化模型主要有三个基本要素:决策变量、目标函数、约束条件。其一般形式如下:

\[opt \ \ \ \ f(x) \\ s.t \ \ \ \ h_i(x)=0,\ i=1,2,\cdots,m \\ g_j(x)\leq0,\ j=1,2,\cdots,l \]

\(opt\) 是“optimize”的缩写,表示“最优化”,一般为 \(min\)\(max\)\(f(x)\) 表示目标函数,\(s.t.\) 是“subject to”的缩写“受约束于”,\(h_i(x), g_i(x)\) 则表示约束条件,其中 \(x\) 表示优化模型的决策变量。

1|3二、运输问题


2.1 问题描述

Question:有三个生产地和四个销售地,其生产量、销售量及单位运费如表所示,求总运费最少的运输方案以及总运费。

2.2 问题分析

由题意,我们不难看出优化模型的决策变量是每个生产地向各个销售地运输的货量,即 \(s_{ij}\)。运输的总费用由各个产地向各个销售地运输所需费用之和,一个产地可以向多个销售地运输货物,一个销售地亦可接受多个产地的货物,所以可知优化模型中的目标函数是运输的总费用,即 \(W=\sum^3_{i=1}\sum^4_{j=1}s_{ij}x_{ij}\)。除此之外,该目标函数受到两个限制,即优化模型的约束条件:

  • 生产地限制:每个生产地的运输量理应小于产生量,\(\sum_{j=1}^4s_{ij}\leq a_i\)
  • 销售地限制:每个销售地接受的货物理应等于销售量,\(\sum_{i=1}^3x_{ij}=b_j\)

2.2 优化模型构建

有以上问题分析,为求出总运费最小的方案,我们可以构建该问题的优化模型如下:

\[min \ \ \ \ \sum^3_{i=1}\sum^4_{j=1}s_{ij}x_{ij} \\ s.t. \ \ \ \ \sum_{j=1}^4s_{ij}\leq a_i \;;\ \sum_{i=1}^3x_{ij}=b_j \ ;\ s_{ij}\geq0 \ ; \]

2.3 模型求解

求解的Lingo代码如下:

sets:
supply/1..3/: s;  !定义运输集,集中的每个元素都有对应的属性,即运输量s;
demand/1..4/: d;	!定义需求集,集中的每个元素都有对应的属性,即需求量d;
link(supply, demand): p, x;	!定义link衍生集,每个元素中都有两个属性,运费p,运输量x;
endsets

data:
s = 30 25 21;	!定义数据集s,表示生产量;
d = 15 17 22 12;	!定义数据集d,表示销售量;
p = 6 2 6 7		!定义数据集p,表示生产地向销售地所对应的运费;
	4 9 5 3
	8 8 1 5;
enddata

min = @sum(link(i,j): p(i,j)*x(i,j));	!目标函数;
@for(supply(i): @sum(demand(j): x(i,j)) <= s(i));	!生产地限制约束条件;
@for(demand(j): @sum(supply(i): x(i,j)) = d(j));	!销售地限制约束条件;

2.4 求解结果

运行如上所示Lingo程序,我们可以得到如下结果:

通过上图展示,我们可以得到运输的最佳方案以及最小运费161个单位。运输方案图示如下:

1|4三、待更新



__EOF__

作  者Taoye
出  处https://www.cnblogs.com/LiT-26647879-510087153/p/9721064.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   玩世不恭的Coder  阅读(3321)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
0
0
关注
跳至底部
点击右上角即可分享
微信分享提示