Lingo解决优化问题

本文主要使用Lingo解决优化问题。先介绍优化模型三要素,即决策变量、目标函数、约束条件。接着以运输问题为例,分析问题,构建优化模型,给出求解的Lingo代码,最终得出运输最佳方案及最小运费为161个单位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lingo解决优化问题

前言

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

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

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

一、优化模型介绍

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

opt    f(x)s.t    hi(x)=0, i=1,2,,mgj(x)0, j=1,2,,l o p t         f ( x ) s . t         h i ( x ) = 0 ,   i = 1 , 2 , ⋯ , m g j ( x ) ≤ 0 ,   j = 1 , 2 , ⋯ , l

opt o p t 是“optimize”的缩写,表示“最优化”,一般为 min m i n max m a x f(x) f ( x ) 表示目标函数, s.t. s . t . 是“subject to”的缩写“受约束于”, hi(x),gi(x) h i ( x ) , g i ( x ) 则表示约束条件,其中 x x 表示优化模型的决策变量。

二、运输问题

2.1 问题描述

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

2.2 问题分析

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

  • 生产地限制:每个生产地的运输量理应小于产生量, 4j=1sijai ∑ j = 1 4 s i j ≤ a i
  • 销售地限制:每个销售地接受的货物理应等于销售量, 3i=1xij=bj ∑ i = 1 3 x i j = b j

2.2 优化模型构建

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

min    i=13j=14sijxijs.t.    j=14sijai; i=13xij=bj ; sij0 ; m i n         ∑ i = 1 3 ∑ j = 1 4 s i j x i j s . t .         ∑ j = 1 4 s i j ≤ a i ;   ∑ i = 1 3 x i j = b j   ;   s i j ≥ 0   ;

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个单位。运输方案图示如下:

三、待更新

lingo双目标优化问题是一种在lingo软件中,同时优化两个目标函数的问题。该问题的目标是通过调整决策变量的值来最小化或最大化两个相互竞争的目标函数。 在解决lingo双目标优化问题时,我们需要定义两个目标函数,每个目标函数都有一组约束条件。这些约束条件可以是几个决策变量之间的关系,或者是对决策变量的数学约束。我们还需要确定决策变量的取值范围和可能的取值。 然后,我们可以使用lingo软件提供的双目标优化算法来求解该问题。该算法使用多目标优化方法,通过评估和比较每个解的目标函数值,来生成一组最优的非劣解。这些非劣解构成了Pareto最优解集合,表示在给定的约束条件下,没有一个目标函数可以进一步改善而不会损害其他目标函数。 在求解过程中,我们可以使用lingo软件提供的工具来可视化每个非劣解之间的关系,并选择我们想要的解决方案。通过观察Pareto最优解集合的形状和组合,我们可以获取有关两个目标函数之间的权衡和折衷的信息。我们还可以根据特定的决策需求,灵活地调整目标函数的权重来生成最优解。 总之,lingo双目标优化问题是使用lingo软件解决的一种多目标优化问题。通过定义目标函数、约束条件和决策变量的取值范围,我们可以使用lingo提供的工具和算法来求解该问题,并获得一组最优的非劣解。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值