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、待更新

相關文章
相關標籤/搜索