Lingo解决最优化问题

Lingo解决优化问题

@函数

前言

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

  • 但愿可以提高本身对Lingo的相关操做并增强对优化问题的思惟模式
  • 方便往后对Lingo核心操做的回顾
  • 但愿每一位到来的朋友可以有所收获

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

1、优化模型介绍

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

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

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

2、运输问题

2.1 问题描述

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

2.2 问题分析

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

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

2.2 优化模型构建

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

$$
min \ \ \ \ \sum3_{i=1}\sum4_{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个单位。运输方案图示以下:

3、待更新

相关文章
相关标签/搜索