日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lingo变量无限制版本_【运筹学】用Lingo求解运输问题,兼谈Lingo语法

發(fā)布時(shí)間:2024/10/14 编程问答 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lingo变量无限制版本_【运筹学】用Lingo求解运输问题,兼谈Lingo语法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一. 運(yùn)輸模型

設(shè)有

個(gè)產(chǎn)地 其產(chǎn)量(供應(yīng)量)分別為 ; 個(gè)銷地 , 其銷量(需求量)分別為 ;從產(chǎn)地 運(yùn)往銷地 的運(yùn)費(fèi)為 . 假設(shè)產(chǎn)銷平衡,問如何安排運(yùn)輸方案能使總運(yùn)費(fèi)最小?

這就是經(jīng)典的運(yùn)輸問題,設(shè)從

運(yùn)往 的運(yùn)量為 (決策變量),則建立產(chǎn)銷平衡的運(yùn)輸模型:

其中,約束條件 (1) 表示從

地運(yùn)出量等于地的供應(yīng)量;約束條件 (2) 表示運(yùn)往地的運(yùn)量等于地的需求量。

若約束 (1) 若改為

, 約束 (2) 仍為 ,則為產(chǎn)大于銷的運(yùn)輸模型;

若約束 (2) 若改為

, 約束 (1) 仍為 ,則為銷大于產(chǎn)的運(yùn)輸模型。

二. Lingo求解

用Lingo求解,只需要將上述模型按照Lingo語法表示出來,而不用操心任何求解細(xì)節(jié)。

例 1

建立運(yùn)輸模型(產(chǎn)銷平衡):

其中,運(yùn)價(jià)

供應(yīng)

,需求 .

Lingo代碼:

sets

運(yùn)行結(jié)果(部分):

結(jié)果解釋:最優(yōu)運(yùn)費(fèi)是85,運(yùn)輸方案是:S1往D3、D4分別運(yùn)送5和2;S2往D1、D4分別運(yùn)送3和1;S3往D2、D4分別運(yùn)送6和3.

三. 程序說明

授人予魚不如授人與漁,所以再講解一下上面代碼涉及到的Lingo語法。

1. Lingo代碼段

Lingo代碼分為若干片段,比如上面代碼包含了:

集合段:sets: ...... endsets ——用來聲明和定義數(shù)組變量;

數(shù)據(jù)段:data: ...... enddata ——用數(shù)據(jù)對(duì)變量賦值;

目標(biāo)與約束段: 即具體模型表述部分(不需起止標(biāo)志)。

注:另外還可以有初始段和計(jì)算段(暫且不談)。

例 1 涉及到兩個(gè)一維數(shù)據(jù):供應(yīng)

、需求 ; 以及一個(gè)二維數(shù)據(jù) . 所以要存儲(chǔ)和使用它們,必須要用到集合段和數(shù)據(jù)段,當(dāng)然還必須有模型段。

2. 集合段部分

(1) 集合段第一句:supplys /1 .. 3/: S;

聲明一個(gè)長(zhǎng)度為 3 的一維數(shù)組 supplys, 并用它定義一個(gè)這樣的一維數(shù)組變量 S.

先是數(shù)組名(隨便起),再是用兩個(gè) / 夾在中間的是數(shù)組的下標(biāo)范圍,中間 .. 是省略表示法,接著用 : 定義數(shù)組變量 S。

(2) 同理,第二句 demands/1..4/: D; 聲明一個(gè)長(zhǎng)度為 4 的一維數(shù)組 demands,并定義一個(gè)這樣的一維數(shù)組變量 D。

(3) 第三句 links(supplys, demands): c, x; 聲明一個(gè)

的二維數(shù)組 links,并用它定義兩個(gè)這樣的二維數(shù)組變量 c, x.

把兩個(gè)一維數(shù)組放一起,起個(gè)名字叫 links,得到二維數(shù)組 links,第1個(gè)一維數(shù)組的維數(shù)就是二維數(shù)組的行數(shù)維度,第2個(gè)一維數(shù)組的維數(shù)就是二維數(shù)組的列數(shù)維度。

注意:這里 links 不是Lingo關(guān)鍵字,可以隨便起名。

3. 數(shù)據(jù)段部分

前面定義好的數(shù)組變量

,就是為了存放已知數(shù)據(jù)的,把已知數(shù)據(jù)賦值給它們,以便目標(biāo)與約束段使用。

數(shù)據(jù)中間用 逗號(hào)/空格 隔開都可以,二維數(shù)據(jù)寫成一行也行,我這樣寫比較易讀而已。

4. 目標(biāo)與約束段部分

為什么不叫模型段呢,是因?yàn)長(zhǎng)ingo一般是把全部代碼放在 model: ....... end 中間(就解決一個(gè)問題,省略也行),整個(gè)叫做模型段。

該部分就是把模型公式“原樣”表述出來,咱們對(duì)照著來看:

min

目標(biāo)函數(shù)是求最小,所以用 “min=”

,所以需要用到 @sum() 函數(shù), 這是Lingo里的求和函數(shù),首先得告訴它求和的范圍, 從1到3, 從1到4,這不正好是前面聲明的(對(duì)應(yīng)的)二維數(shù)組 links 的大小嗎,所以就用 links(i, j)來告訴(也只能用聲明的數(shù)組來告訴),并用 表示行索引, 表列索引。

然后,冒號(hào),求和里面的表達(dá)式。

@for

注意到隨著

變化,這實(shí)際上是 3 個(gè)式子。要表示這種多個(gè)重復(fù)式子,就用到Lingo里的 @for() 函數(shù),首先得告訴它有多少重復(fù)的式子,同樣只能用聲明的(對(duì)應(yīng)的)數(shù)組來告訴,這里是 supplys(i), 并用 表示重復(fù)的索引。

關(guān)于這種“對(duì)應(yīng)”,有信息提示,比如維數(shù)得相同,比如

是從1到3,表示的供應(yīng)(產(chǎn)地)的下標(biāo)。

處理完式子的重復(fù),就剩下表示每次的式子了,有

按前面講到的 @sum() 函數(shù)規(guī)則來寫就行了。

@for

注:上例是產(chǎn)銷平衡運(yùn)輸問題,若不是產(chǎn)銷平衡,把模型表示部分的代碼對(duì)應(yīng)位置的“=”換成“<" 即可(Lingo中 ”<“就是“<=”)。

————————————————————

原創(chuàng)作品,轉(zhuǎn)載請(qǐng)注明,禁止出版盜用。

總結(jié)

以上是生活随笔為你收集整理的lingo变量无限制版本_【运筹学】用Lingo求解运输问题,兼谈Lingo语法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。