Lingo優(yōu)化軟件及其應(yīng)用(all)_第1頁
Lingo優(yōu)化軟件及其應(yīng)用(all)_第2頁
Lingo優(yōu)化軟件及其應(yīng)用(all)_第3頁
Lingo優(yōu)化軟件及其應(yīng)用(all)_第4頁
Lingo優(yōu)化軟件及其應(yīng)用(all)_第5頁
已閱讀5頁,還剩179頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Lingo優(yōu)化軟件及其應(yīng)用

LingoOptimalSoftwareanditsApplications工欲善其事,必先利其器

在工作和生活中碰到一個運籌學(xué)問題,如何快速、方便的建立數(shù)學(xué)模型并求解最優(yōu)結(jié)果進(jìn)而指導(dǎo)工作和生活呢?構(gòu)造一個優(yōu)化模型容易〔相關(guān)領(lǐng)域的知識,根本的數(shù)學(xué)修養(yǎng)〕,如何構(gòu)造求解算法〔數(shù)學(xué)專家?計算機編程高手?〕我們遇到的實際問題一般規(guī)模都較大,即使建立了模型,找到了求解的方法,對于龐大的計算量也是望而卻步〔數(shù)據(jù)在Excel或在數(shù)據(jù)庫里,怎么導(dǎo)出/入來?〕。Lingo系列優(yōu)化軟件包就給我們提供了理想的選擇!網(wǎng)站升級的優(yōu)化問題

隨著信息時代的來臨,越來越多的網(wǎng)站已在中華大地上興建起來,但是Internet在中國的開展速度遠(yuǎn)遠(yuǎn)比不上中國網(wǎng)民的開展速度,于是各個網(wǎng)站都面臨著升級的問題。隨著資金的投入,中國的Chinanet已經(jīng)向百兆帶寬進(jìn)軍,所以許多諸如263那樣的老牌網(wǎng)站面臨著一個同樣的問題:如何在升級的同時合理運用資金,到達(dá)最大的創(chuàng)收效益?如此常見的問題,你真的要通過學(xué)習(xí)《最優(yōu)化方法》尋找一個特別的求解算法然后親自編寫C++代碼?在熬了假設(shè)干個通宵后美滋滋的找到了最優(yōu)方案?聰明的方法是找一個學(xué)運籌學(xué)專業(yè)的研究生,更聰明的方法是自己動手學(xué)習(xí)Lingo

Lingo是解決優(yōu)化模型的利器Lingo是什么工具?

Lingo的特點Lingo是用來求解線性、非線性優(yōu)化問題的簡易工具。Lingo內(nèi)置了一種建立最優(yōu)化模型的語言,可以簡便地表達(dá)大規(guī)模問題,利用Lingo高效的求解器可快速求解并分析結(jié)果。程序執(zhí)行速度很快,易于輸入、修改、求解和分析一個數(shù)學(xué)規(guī)劃問題有關(guān)Lingo軟件的詳細(xì)情況可上網(wǎng)訪問網(wǎng)站:

Lingo的歷史美國芝加哥〔Chicago〕大學(xué)的LinusSchrage教授于1980年前后開發(fā),后來成立LINDO系統(tǒng)公司〔LindoSystemsInc.〕主要產(chǎn)品LINDO:LinearINteractiveandDiscreteOptimizer(V6.1)LINGO:LinearINteractiveGeneralOptimizer(V9.0)LINDOAPI:LINDOApplicationProgrammingInterface(2.0)演示〔試用〕版、學(xué)生版、高級版、超級版、工業(yè)版、擴展版…〔求解問題規(guī)模和選件不同〕數(shù)學(xué)規(guī)劃實際問題中的優(yōu)化模型一般的優(yōu)化模型及其求解方式?jīng)Q策變量目標(biāo)函數(shù)約束條件線性規(guī)劃〔LP〕二次規(guī)劃〔QP〕非線性規(guī)劃〔NLP〕0-1整數(shù)規(guī)劃一般整數(shù)規(guī)劃純整數(shù)規(guī)劃〔PIP〕混合整數(shù)規(guī)劃〔MIP〕連續(xù)規(guī)劃整數(shù)規(guī)劃〔IP〕

Lingo能做什么?

Lingo怎么做到的?

課程內(nèi)容1.走近Lingo.2.Lingo中的集3.模型的數(shù)據(jù)局部和初始局部4.Lingo函數(shù)5.LingoWindows命令

課程參考的一些文獻(xiàn)萬保成.Lingo8.0

for

windows軟件及應(yīng)用.洪文,吳本忠.Lingo4.0forWindows最優(yōu)化軟件及其應(yīng)用.北京:北京大學(xué)出版社,2001.謝金星,薛毅優(yōu)化建模與Lindo/lingo軟件北京:清華大學(xué)出版社,2005.Lingo幫助文檔.LingoUsersGuide,LINDOSystems,Inc,1999.朱德通編著.最優(yōu)化模型與實驗.上海:同濟大學(xué)出版社,2003.H.P.威廉斯著.孟國璧等譯.數(shù)學(xué)規(guī)劃模型建立與計算機應(yīng)用.北京:國防工業(yè)出版社,1991.姜啟源,謝金星,葉俊編.數(shù)學(xué)模型〔第三版〕.北京:高等教育出版社,2003.

1走近LingoLingo一瞥當(dāng)你在windows下開始運行LINGO系統(tǒng)時,會得到類似下面的一個窗口:LINGO軟件的主窗口(用戶界面),所有其他窗口都在這個窗口之內(nèi)

模型窗口(ModelWindow),用于輸入LINGO優(yōu)化模型(即LINGO程序)狀態(tài)行(最左邊顯示“Ready”,表示“準(zhǔn)備就緒”)當(dāng)前時間

當(dāng)前光標(biāo)的位置§1.2了解LINGO的菜單新建翻開保存打印剪切復(fù)制粘貼取消重做查找定位匹配括號求解顯示答案模型圖示選項設(shè)置窗口后置關(guān)閉所有窗口平鋪窗口在線幫助上下文相關(guān)幫助文件菜單編輯菜單LINGO菜單窗口菜單幫助菜單翻開文件:F3打印文件:F7復(fù)制:Ctrl+C取消操作:Ctrl+Z查找:Ctrl+F顯示解答:Alt+O匹配括號:Ctrl+P選項設(shè)置:Ctrl+I關(guān)閉所有窗口:Alt+X在線幫助:F1新建文件:F2保存文件:F4剪切:Ctrl+X粘貼:Ctrl+V恢復(fù)操作:Ctrl+Y定位某行:ctrl+T求解模型:Ctrl+S模型圖示:Ctrl+K窗口后置:Ctrl+B

平鋪窗口:Alt+T上下文相關(guān)的幫助〔5〕工具欄

1走近LingoLingo求解模型的例子--線性規(guī)劃

1走近Lingo建立一個Lingo模型一個優(yōu)化模型的三個要素:目標(biāo)函數(shù)通常是一個公式,用以表示要最優(yōu)化的內(nèi)容。 〔min=2*x1+3*x2;〕變量就是可以控制選擇的量?!瞲1,x2〕約束對模型取值的一些限制條件 x1+x2>=350;x1>=100;2*x1+x2<=600;LINGO的語法規(guī)定:(1)求目標(biāo)函數(shù)的最大值和最小值分別用MAX=…或MIN=…來表示;(2)每個語句必須以分號“;”結(jié)束,每行可以有多個語句,語句可以跨行;(3)變量名稱必須以字母(A-Z)開頭,由字母、數(shù)字(0-9)和下劃線“_”組成,長度不超過32個字符,不區(qū)分大小寫;(4)可以給語句加上標(biāo)號,例如[OBJ]MAX=…

;(5)以“!”開頭,以“;”結(jié)束的語句是注釋語句;(6)如果對變量的取值范圍沒有作特殊說明,那么默認(rèn)所有決策變量都非負(fù);(7)LINGO模型以語句“MODEL:”開頭,以“END”結(jié)束,對于比較簡單的模型,這兩句可以省略;Lingo的文件保存類型“LG4”表示LINGO格式的模型文件,是一種特殊的二進(jìn)制格式文件,保存了我們在模型窗口中所能夠看到的所有文本和其他對象及其格式信息,只有LINGO能讀出它,用其他系統(tǒng)翻開這種文件時會出現(xiàn)亂碼 “LDT”表示數(shù)據(jù)文件“LTF”表示命令腳本文件“LGR”表示報告文件“MPS”:TheMPSfileformatisanindustrystandardformatdevelopedbyIBM除“LG4”文件外,這里的另外幾種格式的文件其實都是普通的文本文件,可以用任何文本編輯器翻開和編輯

1走近Lingo建立一個Lingo模型-〔最大化利潤〕

1走近Lingo建立一個Lingo模型-〔最大化利潤〕目標(biāo)函數(shù)

MAX=100*STANDARD+150*TURBO;變量

STANDARD,TURBO均表示為該型產(chǎn)品的產(chǎn)量約束

STANDARD<=100;(STANDARD生產(chǎn)能力限制) TURBO<=120; (TURBO生產(chǎn)能力限制)STANDARD+2*TURBO<=160;(勞動力約束)

1走近Lingo建立一個Lingo模型-〔最大化利潤〕簡單的模型,

簡單的求解!來個復(fù)雜的!Lingo求解模型的例子--運輸問題

假設(shè)WirelessWidget公司有6個貨?!瞁arehouse〕向8個銷售商〔Vendor〕供給貨物,每一個貨棧的供給量是有限的,而每個銷售商的需求量必須得到滿足。該公司要決定如何調(diào)運貨棧的貨物滿足銷售商以使總運輸最小。Lingo求解模型的例子--運輸問題

產(chǎn)銷單位運價如下表:V1V2V3V4V5V6V7V8產(chǎn)量WH16267425960WH24953858255WH35219743351WH47673927143WH52395726541WH65522814352銷量3537223241324338

1走近LingoLingo求解模型的例子--運輸問題

數(shù)學(xué)表達(dá)式、Lingo表達(dá)式:求解模型,

分析模型!來個困難的!Lingo求解模型的例子--生產(chǎn)問題(問題提出)一奶制品加工廠用牛奶生產(chǎn)A1,A2兩種奶制品,1桶牛奶可以在甲車間用12小時加工成3公斤A1,或者在乙車間用8小時加工成4公斤A2。根據(jù)市場需求,生產(chǎn)的A1,A2全部能售出,且每公斤A1獲利24元,每公斤A2獲利16元?,F(xiàn)在加工廠每天能得到50桶牛奶的供給,每天正式工人總的勞動時間480小時,并且甲車間每天至多能加工100公斤A1,乙車間的加工能力沒有限制。試為該廠制訂一個生產(chǎn)方案,使每天獲利最大?假設(shè):x1為甲車間消耗的牛奶桶數(shù),x2為乙車間消耗的牛奶桶數(shù)Lingo求解模型的例子--生產(chǎn)問題(問題提出)進(jìn)一步討論以下3個附加問題:1〕假設(shè)用35元可以買到1桶牛奶,應(yīng)否作這項投資?假設(shè)投資,每天最多購置多少桶牛奶?2〕假設(shè)可以聘用臨時工人以增加勞動時間,付給臨時工人的工資最多是每小時幾元?3〕由于市場需求變化,每公斤A1的獲利增加到30元,應(yīng)否改變生產(chǎn)方案?例加工奶制品的生產(chǎn)方案1桶牛奶3公斤A1

12小時8小時4公斤A2

或獲利24元/公斤獲利16元/公斤50桶牛奶時間480小時至多加工100公斤A1

制訂生產(chǎn)方案,使每天獲利最大35元可買到1桶牛奶,買嗎?假設(shè)買,每天最多買多少?

可聘用臨時工人,付出的工資最多是每小時幾元?A1的獲利增加到30元/公斤,應(yīng)否改變生產(chǎn)方案?每天:Lingo求解模型的例子--生產(chǎn)問題(問題提出)1桶牛奶3公斤A1

12小時8小時4公斤A2

或獲利24元/公斤獲利16元/公斤x1桶牛奶生產(chǎn)A1

x2桶牛奶生產(chǎn)A2

獲利24×3x1

獲利16×4x2

原料供給勞動時間加工能力決策變量目標(biāo)函數(shù)每天獲利約束條件非負(fù)約束線性規(guī)劃模型(LP)時間480小時至多加工100公斤A1

50桶牛奶每天模型求解

OBJECTIVEFUNCTIONVALUE

1)3360.000

VARIABLEVALUEREDUCEDCOST

X120.0000000.000000

X230.0000000.000000ROWSLACKORSURPLUSDUALPRICES2)0.00000048.0000003)0.0000002.0000004)40.0000000.000000NO.ITERATIONS=220桶牛奶生產(chǎn)A1,30桶生產(chǎn)A2,利潤3360元。Max=72x1+64x2x1+x2<=5012x1+8x2<4803x1<100模型求解OBJECTIVEFUNCTIONVALUE1)3360.000VARIABLEVALUEREDUCEDCOSTX120.0000000.000000X230.0000000.000000ROWSLACKORSURPLUSDUALPRICES2)0.00000048.0000003)0.0000002.0000004)40.0000000.000000NO.ITERATIONS=2reducedcost:縮減本錢系數(shù)值,表示當(dāng)該非基變量增加一個單位時〔其他非基變量保持不變〕目標(biāo)函數(shù)減少的量(對max型問題)OBJECTIVEFUNCTIONVALUE1)3360.000VARIABLEVALUEREDUCEDCOSTX120.0000000.000000X230.0000000.000000

ROW

SLACKORSURPLUSDUALPRICES

2)0.00000048.000000

3)0.0000002.0000004)40.0000000.000000原料無剩余時間無剩余加工能力剩余40三種資源“資源”剩余為零的約束為緊約束〔有效約束〕結(jié)果解釋Max=72x1+64x2x1+x2<=5012x1+8x2<4803x1<100注:約束條件中,對于“<=”不等式,稱之為松弛(Slack).對于“>=”不等式,稱之為剩余(Surplus).不等式左右兩邊值相等時,松弛和剩余的值為0;如果約束條件無法滿足,那么松弛和剩余的值為負(fù).執(zhí)行結(jié)果:當(dāng)該非基變量增加一個單位時目標(biāo)函數(shù)減少的量〔最優(yōu)解時,=0〕最優(yōu)解約束條件左面和右面的差值,“資源”剩余為零的約束為緊約束〔有效約束〕,這里第3個約束〔加工能力〕有剩余。影子價格:最優(yōu)解下“資源”增加1單位時“效益”的增量。原料增1單位,利潤增48時間加1單位,利潤增2能力增減不影響利潤Q1:35元可買到1桶牛奶,要買嗎?Q2:聘用臨時工人付出的工資最多每小時幾元?OBJECTIVEFUNCTIONVALUE1)3360.000VARIABLEVALUEREDUCEDCOSTX120.0000000.000000X230.0000000.000000ROWSLACKORSURPLUSDUALPRICES

2)0.00000048.000000

3)0.0000002.000000

4)40.0000000.000000結(jié)果解釋最優(yōu)解下“資源”增加1單位時“效益”的增量原料增1單位,利潤增48時間加1單位,利潤增2能力增減不影響利潤影子價格35元可買到1桶牛奶,要買嗎?35<48,應(yīng)該買!

聘用臨時工人付出的工資最多每小時幾元?2元!RANGESINWHICHTHEBASISISUNCHANGED:

OBJCOEFFICIENTRANGES

VARIABLECURRENTALLOWABLEALLOWABLECOEFINCREASEDECREASE

X172.00000024.0000008.000000X264.0000008.00000016.000000RIGHTHANDSIDERANGESROWCURRENTALLOWABLEALLOWABLERHSINCREASEDECREASE250.00000010.0000006.6666673480.00000053.33333280.0000004100.000000INFINITY40.000000最優(yōu)解不變時目標(biāo)系數(shù)允許變化范圍x1系數(shù)范圍(64,96)

x2系數(shù)范圍(48,72)A1獲利增加到30元/千克,應(yīng)否改變生產(chǎn)方案x1系數(shù)由243=72增加為303=90,在允許范圍內(nèi)不變!(約束條件不變)結(jié)果解釋結(jié)果解釋RANGESINWHICHTHEBASISISUNCHANGED:OBJCOEFFICIENTRANGESVARIABLECURRENTALLOWABLEALLOWABLECOEFINCREASEDECREASEX172.00000024.0000008.000000X264.0000008.00000016.000000

RIGHTHANDSIDERANGESROWCURRENTALLOWABLEALLOWABLERHSINCREASEDECREASE250.00000010.0000006.6666673480.00000053.33333280.0000004100.000000INFINITY40.000000影子價格有意義時約束右端的允許變化范圍原料最多增加10時間最多增加5335元可買到1桶牛奶,每天最多買多少?最多買10桶?(目標(biāo)函數(shù)不變)注意:充分但可能不必要

1走近LingoLingo求解模型的例子--生產(chǎn)問題(問題描述)!目標(biāo)描述;max=72*x1+64*x2;!約束條件描述;x1+x2<=50; !牛奶的能力限制,不能超過50桶牛奶 12*x1+8*x2<=480;!勞動時間的限制,不能超過480小時3*x1<=100; !甲車間的生產(chǎn)能力限制,每天最多加工100公斤

1走近LingoLingo求解模型的例子--生產(chǎn)問題(解決問題1)SlackorSurplus給出這3種資源在最優(yōu)解下是否有剩余DualPrice給出這3種資源在最優(yōu)解下“資源”增加1個單位時“效益”的增量.經(jīng)濟學(xué)上稱為影子價格,即1桶牛奶的影子價格為48元,1小時勞動的影子價格為2元,車間甲的影子價格為零。

1走近LingoLingo求解模型的例子--生產(chǎn)問題(解決問題2)答復(fù)附加問題1:用35元可以買到1桶牛奶,低于1桶牛奶的影子價格48,當(dāng)然應(yīng)該作這項投資。答復(fù)附加問題2:聘用臨時工人以增加勞動時間,付給的工資低于勞動時間的影子價格才可以增加利潤,所以工資最多是每小時2元。

1走近LingoLingo求解模型的例子--生產(chǎn)問題(解決問題3)進(jìn)行靈敏度分析:

1走近LingoLingo求解模型的例子--生產(chǎn)問題(解決問題4)進(jìn)行靈敏度分析:目標(biāo)函數(shù)的系數(shù)發(fā)生變化時〔假定約束條件不變〕,可以給出最優(yōu)基不變條件下目標(biāo)函數(shù)系數(shù)的允許變化范圍:x1的系數(shù)為〔72-8,72+24〕=〔64,96〕;x2的系數(shù)為〔64-16,64+8〕=〔48,72〕?!沧⒁猓簒1系數(shù)的允許范圍需要x2系數(shù)64不變,反之亦然〕由于目標(biāo)函數(shù)的費用系數(shù)變化并不影響約束條件,因此此時最優(yōu)基不變可以保證最優(yōu)解也不變,但最優(yōu)值變化。用這個結(jié)果很容易答復(fù)附加問題3〕:假設(shè)每公斤A1的獲利增加到30元,那么x1系數(shù)變?yōu)?0×3=90,在允許范圍內(nèi),所以不應(yīng)改變生產(chǎn)方案,但最優(yōu)值變?yōu)?0×20+64×30=3720。

1走近LingoLingo求解模型的例子--生產(chǎn)問題(解決問題5)影子價格的作用〔即在最優(yōu)解下“資源”增加1個單位時“效益”的增量〕是有限制的。影子價格在有意義條件下約束右端的限制范圍:milk〕原料最多增加10〔桶牛奶〕,time〕勞動時間最多增加53〔小時〕?,F(xiàn)在可以答復(fù)附加問題1〕的第2問:雖然應(yīng)該批準(zhǔn)用35元買1桶牛奶的投資,但每天最多購置10桶牛奶。此外,可以用低于每小時2元的工資聘用臨時工人以增加勞動時間,但最多增加53.3333小時。靈敏性分析給出的只是最優(yōu)基保持不變的充分條件,而不一定是必要條件。所以要使影子價格有意義,利潤的增加要大于牛奶的投資。

還能干什么?

1走近Lingo求解非線性方程組

2Lingo中的集

對實際問題建模的時候,總會遇到一群或多群相聯(lián)系的對象,比方工廠、消費者群體、交通工具和雇工等等。Lingo允許把這些相聯(lián)系的對象聚合成集〔sets〕。一旦把對象聚合成集,就可以利用集來最大限度的發(fā)揮Lingo建模語言的優(yōu)勢。2.1為什么使用集2.2什么是集2.3模型的集局部2.4小結(jié)2.1為什么使用集集是Lingo建模語言的根底,是程序設(shè)計最強有力的根本構(gòu)件。借助于集,能夠用一個單一的、長的、簡明的復(fù)合公式表示一系列相似的約束,從而可以快速方便地表達(dá)規(guī)模較大的模型。例如:對于100個貨棧的運輸問題,如果一個一個的寫出全部約束將是可怕的工作量。貨棧1的運量<=存量貨棧2的運量<=存量貨棧3的運量<=存量………………Lingo可以采用最為簡潔的表示方法:每個貨棧的運輸量<=存量2.2什么是集集是一群相聯(lián)系的對象,這些對象也稱為集的成員。一個集可能是一系列產(chǎn)品、卡車或雇員。每個集成員可能有一個或多個與之有關(guān)聯(lián)的特征,我們把這些特征稱為屬性。屬性值可以預(yù)先給定,也可以是未知的,有待于Lingo求解。例如:〔1〕產(chǎn)品集中的每個產(chǎn)品可以有一個價格屬性;〔2〕卡車集中的每輛卡車可以有一個牽引力屬性;〔3〕雇員集中的每位雇員可以有一個薪水屬性,也可以有一個生日屬性等等。

2Lingo中的集

2.2什么是集〔續(xù)〕Lingo有兩種類型的集: 原始集(primitiveset)和派生集(derivedset)一個原始集是由一些最根本的對象組成的。例如:集合WAREHOUSE是有6個貨棧組成 集合VENDERS是由8個銷售商組成

2Lingo中的集

2.2什么是集〔續(xù)〕一個派生集是用一個或多個其它集來定義的,也就是說,它的成員來自于其它已存在的例如:由6個貨棧和8個銷售商之間的聯(lián)系而形成的集合〔LINKS〕就是派生集合,需要注意的是,派生集合也可以由其他派生集合生成2.3模型的集局部集局部是Lingo模型的一個可選局部。在Lingo模型中使用集之前,集局部必須事先定義。集局部以關(guān)鍵字“sets:”開始,以“endsets”結(jié)束。一個模型可以沒有集局部,或有一個簡單的集局部,或有多個集局部。一個集局部可以放置于模型的任何地方,但是一個集及其屬性在模型約束中被引用之前必須定義了它們。2.3模型的集局部sets:set1/1..3/:x,y;endsetsdata:x=123;y=456;enddataSet1集合定義了兩個屬性x和y。x取1、2、3三個值,而y取4、5、6三個值。sets:set1/1..3/:x,y;endsetsdata:xy=142536;enddataSet1集合定義了兩個屬性x和y。x取1、2、3三個值,而y取4、5、6三個值。2.3模型的集局部sets:warehouses/wh1..wh6/:capacity;vendors/v1..v8/:demand;links(warehouses,vendors):cost,volume;endsetsdata:capacity=605551434152;demand=3537223241324338;cost=626742954953858252197433767392712395726555228143;enddata

2Lingo中的集

2.3.1定義原始集定義原始集的語法集的名字[/集的成員/][:集成員的屬性];注意:用“[]”表示該局部內(nèi)容可選。如果集成員放在集定義中,那么對它們可采取顯式羅列和隱式羅列兩種方式。如果集成員不放在集定義中,那么可以在隨后的數(shù)據(jù)局部定義它們。

2Lingo中的集

2.3.1定義原始集〔續(xù)〕①當(dāng)顯式羅列成員時,必須為每個成員輸入一個不同的名字,中間用空格或逗號擱開,允許混合使用。例2.1可以定義一個名為students的原始集,它具有成員John、Jill、Rose和Mike,屬性有sex和age:sets:students/JohnJill,RoseMike/:sex,age;endsets

2Lingo中的集

2.3.1定義原始集〔續(xù)〕②當(dāng)隱式羅列成員時,不必羅列出每個集成員??刹捎萌缦抡Z法:集的名字/集的成員1..集的成員N/[:集成員的屬性];

隱式成員列表格式示例所產(chǎn)生集成員1..n1..51,2,3,4,5StringM..StringNCar2..car14Car2,Car3,Car4,…,Car14DayM..DayNMon..FriMon,Tue,Wed,Thu,FriMonthM..MonthNOct..JanOct,Nov,Dec,JanMonthYearM..MonthYearNOct2001..Jan2002Oct2001,Nov2001,Dec2001,Jan2002

2Lingo中的集

2.3.1定義原始集〔續(xù)〕③集成員不放在集定義中,而在隨后的數(shù)據(jù)局部來定義。!集局部;sets:students:sex,age;endsets!數(shù)據(jù)局部;data:students,sex,age=John116Jill014 Rose017 Mike113;enddata注意:開頭用感慨號〔!〕,末尾用分號〔;〕表示注釋,可跨多行。

2Lingo中的集

2.3.2定義派生集定義派生集的語法集的名字(父集名稱列表)[/集的成員/][:集成員的屬性];注意:用“[]”表示該局部內(nèi)容可選。父集名稱列表是已定義的集的列表,多個時必須用逗號隔開。如果沒有指定成員列表,那么Lingo會自動創(chuàng)立父集成員的所有組合作為派生集的成員(參見下頁的例子)。派生集的父集既可以是原始集,也可以是其它的派生集。

2Lingo中的集

2.3.2定義派生集(續(xù))編號成員編號成員1(A,M,1)2(A,M,2)3(A,N,1)4(A,N,2)5(B,M,1)6(B,M,2)7

(B,N,1)8(B,N,2)定義派生集的例子sets:product/AB/;machine/MN/;week/1..2/;allowed(product,machine,week):x;endsetsLingo生成了三個父集的所有組合共八組作為allowed集的成員:

2Lingo中的集

2.3.2定義派生集(續(xù))稠密集的定義稀疏集的定義派生集成員列表方式成員列表被忽略時,派生集成員由父集成員所有的組合構(gòu)成,這樣的派生集成為稠密集。

如果限制派生集的成員,使它成為父集成員所有組合構(gòu)成的集合的一個子集,這樣的派生集成為稀疏集。

①顯式羅列。 例子:allowed(product,machine,week)/AM1,AN2,BN1/;

②設(shè)置成員資格過濾器。

2Lingo中的集

????設(shè)置成員資格過濾器sets:!學(xué)生集:性別屬性sex,1表示男性,0表示女性;年齡屬性age.;students/John,Jill,Rose,Mike/:sex,age;!男學(xué)生和女學(xué)生的聯(lián)系集:友好程度屬性friend,[0,1]之間的數(shù)。;linkmf(students,students)|sex(&1)#eq#1#and#sex(&2)#eq#0:friend;!男學(xué)生和女學(xué)生的友好程度大于0.5的集;linkmf2(linkmf)|friend(&1,&2)#ge#0.5:x;endsetsdata:sex,age=116014017013;friend=0.30.50.6;enddata

2Lingo中的集

設(shè)置成員資格過濾器〔續(xù)〕用豎線〔|〕來標(biāo)記一個成員資格過濾器的開始。#eq#是邏輯運算符,用來判斷是否“相等”,可參考§4.&1可看作派生集的第1個原始父集的索引,它取遍該原始父集的所有成員;&2可看作派生集的第2個原始父集的索引,它取遍該原始父集的所有成員;&3,&4,……,以此類推。注意:如果派生集B的父集是另外的派生集A,那么上面所說的原始父集是集A向前回溯到最終的原始集,其順序保持不變,并且派生集A的過濾器對派生集B仍然有效。因此,派生集的索引個數(shù)是最終原始父集的個數(shù),索引的取值是從原始父集到當(dāng)前派生集所作限制的總和。

2Lingo中的集

2.4小結(jié)Lingo可識別的集只有兩種:原始集和派生集原始集是根本的對象,不能再被拆分成更小的組分。原始集可以由顯式羅列和隱式羅列兩種方式來定義。當(dāng)用顯式羅列方式時,需在集成員列表中逐個輸入每個成員。當(dāng)用隱式羅列方式時,只需在集成員列表中輸入首成員和末成員,而中間的成員由Lingo產(chǎn)生。派生集是由其它的集來創(chuàng)立。這些集被稱為該派生集的父集〔原始集或其它的派生集〕。一個派生集既可以是稀疏的,也可以是稠密的。稠密集包含了父集成員的所有組合〔有時也稱為父集的笛卡爾乘積〕。稀疏集僅包含了父集的笛卡爾乘積的一個子集,可通過顯式羅列和成員資格過濾器這兩種方式來定義。顯式羅列方法就是逐個羅列稀疏集的成員。成員資格過濾器方法通過使用稀疏集成員必須滿足的邏輯條件從稠密集成員中過濾出稀疏集的成員。

2Lingo中的集

2.4小結(jié)Lingo集類型的示意

2Lingo中的集上機作業(yè)

1、熟悉Lingo的安裝2、簡單熟悉Lingo的語法標(biāo)準(zhǔn),并可以解題算例:某玻璃制造廠與三個不同地點的純堿供給商簽訂合同,由他們供貨給三個分廠,條件是不超過合同所定的數(shù)量,但必須滿足生產(chǎn)需要。該問題如表3-1所示。問題中所給費率是每個供給商到每個工廠之間最短路徑的運輸費率。求運輸方案2Lingo中的集上機作業(yè)工廠1工廠2工廠3供應(yīng)量供應(yīng)商1x11x12x13400供應(yīng)商2x21x22x23700供應(yīng)商3x31x32x33500需求量6005005003-1運輸問題-供需情況供銷平衡2Lingo中的集上機作業(yè)工廠1工廠2工廠3供應(yīng)商1476供應(yīng)商2314供應(yīng)商39583-1運輸問題-運輸本錢2Lingo中的集上機作業(yè)利用集的概念構(gòu)造相應(yīng)的Lingo模型并求解上機作業(yè)要求Lingo求解的程序的文件名命名規(guī)那么為L+自己的學(xué)號后4位+姓名+題號〔例如文件名:L6048陳鴿1.LG4〕。所有文件打包成擴展名為ZIP或RAR的壓縮文件〔例如文件名為L6048陳鴿.RAR〕并發(fā)到信箱:。2Lingo中的集上機作業(yè) 3模型的數(shù)據(jù)局部和初始局部在處理模型的數(shù)據(jù)時,需要為集指派一些成員并且在Lingo求解模型之前為集的某些屬性指定值。為此,Lingo為用戶提供了兩個可選局部:輸入集成員和數(shù)據(jù)的數(shù)據(jù)局部〔DataSection〕和為決策變量設(shè)置初始值的初始局部〔InitSection〕。3.1模型的數(shù)據(jù)局部2.2模型的初始局部 3模型的數(shù)據(jù)局部和初始局部3.1模型的數(shù)據(jù)局部為什么需要數(shù)據(jù)局部數(shù)據(jù)局部入門數(shù)據(jù)局部提供了模型相對靜止局部和數(shù)據(jù)別離的可能性。顯然,這對模型的維護和維數(shù)的縮放非常便利。數(shù)據(jù)局部以關(guān)鍵字“data:”開始,以關(guān)鍵字“enddata”結(jié)束。在這里,可以指定集成員、集的屬性。其語法如下:對象列=數(shù)值列;數(shù)據(jù)局部入門〔續(xù)〕對象列:包含要指定值的屬性名、要設(shè)置集成員的集名,用逗號或空格隔開。一個對象列中至多有一個集名,而屬性名可以有任意多。如果對象列中有多個屬性名,那么它們的類型必須一致。如果對象列中有一個集名,那么對象列中所有的屬性的類型就是這個集。數(shù)值列:包含要分配給對象列中的對象的值,用逗號或空格隔開。注意屬性值的個數(shù)必須等于集成員的個數(shù)??聪旅娴睦印ets:set1/A,B,C/:X,Y;endsetsdata:X=1,2,3;Y=4,5,6;enddata在集set1中定義了兩個屬性X和Y。X的三個值是1、2和3,Y的三個值是4、5和6。數(shù)據(jù)局部入門〔續(xù)〕也可采用如下例子中的復(fù)合數(shù)據(jù)聲明〔datastatement〕:sets:set1/A,B,C/:X,Y;endsetsdata:X,Y=142536;enddata看到這個例子,可能會認(rèn)為X被指定了1、4和2三個值,因為它們是數(shù)值列中前三個,而正確的答案是1、2和3。假設(shè)對象列有n個對象,Lingo在為對象指定值時,首先在n個對象的第1個索引處依次分配數(shù)值列中的前n個對象,然后在n個對象的第2個索引處依次分配數(shù)值列中緊接著的n個對象,……,以此類推。模型的所有數(shù)據(jù)——屬性值和集成員——被單獨放在數(shù)據(jù)局部,這可能是最標(biāo)準(zhǔn)的數(shù)據(jù)輸入方式。3.1模型的數(shù)據(jù)局部參數(shù)在數(shù)據(jù)局部也可以指定一些標(biāo)量變量〔scalarvariables〕。當(dāng)一個標(biāo)量變量在數(shù)據(jù)局部確定時,稱之為參數(shù)。data:interest_rate=.085;enddata模型中用利率8.5%作為一個參數(shù)也可以同時指定多個參數(shù)。data:interest_rate,inflation_rate=.085.03;enddata3.1模型的數(shù)據(jù)局部實時數(shù)據(jù)處理在某些情況,對于模型中的某些數(shù)據(jù)并不是定值,我們把這種情況稱為實時數(shù)據(jù)處理〔whatifanalysis〕data:interest_rate,inflation_rate=.085?;enddata3.1模型的數(shù)據(jù)局部指定屬性為一個值可以在數(shù)據(jù)聲明的右邊輸入一個值來把所有的成員的該屬性指定為一個值。sets:days/MO,TU,WE,TH,FR,SA,SU/:needs;endsetsdata:needs=20;enddataLingo將用20指定days集的所有成員的needs屬性。3.1模型的數(shù)據(jù)局部指定屬性為一個值〔續(xù)〕對于多個屬性的情形,也可以指定一個值sets:days/MO,TU,WE,TH,FR,SA,SU/:needs,cost;endsetsdata:needscost=20100;enddata3.1模型的數(shù)據(jù)局部數(shù)據(jù)局部的未知數(shù)值有時只想為一個集的局部成員的某個屬性指定值,而讓其余成員的該屬性保持未知,以便讓Lingo去求出它們的最優(yōu)值。在數(shù)據(jù)聲明中輸入兩個相連的逗號表示該位置對應(yīng)的集成員的屬性值未知。兩個逗號間可以有空格。sets:years/1..5/:capacity;endsetsdata:capacity=,34,20,,;enddata屬性capacity的第2個和第3個值分別為34和20,其余的未知。3.1模型的數(shù)據(jù)局部模型的初始數(shù)值初始局部是Lingo提供的一個可選局部。在初始局部中,可以輸入初始聲明〔initializationstatement〕。初始局部輸入的值僅被Lingo求解器當(dāng)作初始點來用,并且僅僅對非線性模型有用。一個初始局部以“init:”開始,以“endinit”結(jié)束。init:X,Y=0,.1;endinitY=@log(X);X^2+Y^2<=1;好的初始點會減少模型的求解時間。

4Lingo函數(shù)

Lingo有9種類型的函數(shù):1.

根本運算符:包括算術(shù)運算符、邏輯運算符和關(guān)系運算符2.

數(shù)學(xué)函數(shù):三角函數(shù)和常規(guī)的數(shù)學(xué)函數(shù)3.

金融函數(shù):Lingo提供的兩種金融函數(shù)4.

概率函數(shù):Lingo提供了大量概率相關(guān)的函數(shù)5.

變量界定函數(shù):這類函數(shù)用來定義變量的取值范圍6.

集操作函數(shù):這類函數(shù)為對集的操作提供幫助7.

集循環(huán)函數(shù):遍歷集的元素,執(zhí)行一定的操作的函數(shù)8.

數(shù)據(jù)輸入輸出函數(shù):這類函數(shù)允許模型和外部數(shù)據(jù)源相聯(lián)系,進(jìn)行數(shù)據(jù)的輸入輸出9.

輔助函數(shù):各種雜類函數(shù)4.1根本運算符4.1.1算數(shù)運算符算術(shù)運算符是針對數(shù)值進(jìn)行操作的。LINGO提供了5種二元運算符:^乘方﹡乘/除﹢加﹣減Lingo唯一的一元算術(shù)運算符是取反函數(shù)“﹣”。算術(shù)運算符例如:2﹣5/3,(2﹢4)/5等等。4.1.2邏輯運算符在Lingo中,邏輯運算符主要用于集循環(huán)函數(shù)的條件表達(dá)式中,來控制在函數(shù)中哪些集成員被包含,哪些被排斥。在創(chuàng)立稀疏集時用在成員資格過濾器中。(#not#否認(rèn)該操作數(shù)的邏輯值,#not#是一個一元運算符)運算符為TRUE時條件運算符為TRUE時條件#eq#若兩個運算數(shù)相等#ne#若兩個運算符不相等#gt#若左邊的運算符嚴(yán)格大于右邊的運算符#ge#若左邊的運算符大于或等于右邊的運算符#lt#若左邊的運算符嚴(yán)格小于右邊的運算符#le#若左邊的運算符小于或等于右邊的運算符#and#僅當(dāng)兩個參數(shù)都為true時#or#兩個參數(shù)中有一個為true時4.1.2邏輯運算符(續(xù))這些運算符的優(yōu)先級由高到低為:高#not##eq##ne##gt##ge##lt##le#低#and##or#邏輯運算符例如:2#gt#3#and#4#gt#2,其結(jié)果為假〔0〕。4.1.3關(guān)系運算符〔1〕Lingo有三種關(guān)系運算符:“=”、“<=”和“>=”。〔2〕Lingo并不支持嚴(yán)格小于和嚴(yán)格大于關(guān)系運算符?!?〕Lingo中還能用“<”表示小于等于關(guān)系,“>”表示大于等于關(guān)系?!?〕如讓A嚴(yán)格小于B,那么:A+ε<=B,4.2數(shù)學(xué)函數(shù)Lingo提供了大量的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù):@abs(x)返回x的絕對值@sin(x)返回x的正弦值,x采用弧度制@cos(x)返回x的余弦值@tan(x)返回x的正切值@exp(x)返回常數(shù)e的x次方@log(x)返回x的自然對數(shù)@lgm(x)返回x的gamma函數(shù)的自然對數(shù)@sign(x)如果x<0返回-1;否那么,返回1@floor(x)返回x的整數(shù)局部。當(dāng)x>=0時,返回不超過x的最大整數(shù);當(dāng)x<0時,返回不低于x的最大整數(shù)。@smax(x1,x2,…,xn)返回x1,x2,…,xn中的最大值@smin(x1,x2,…,xn)返回x1,x2,…,xn中的最小值4.2數(shù)學(xué)函數(shù) - 模型實例A B C DE a b x給定一個直角三角形,求包含該三角形的最小正方形。其中:求最小的正方形就相當(dāng)于求如下的最優(yōu)化問題:

4.2數(shù)學(xué)函數(shù) - 模型實例〔續(xù)〕Lingo代碼如下:model:sets:object/1..3/:f;endsetsdata:a,b=3,4;!兩個直角邊長,修改很方便;enddataf(1)=a*@sin(x);f(2)=b*@cos(x);f(3)=a*@cos(x)+b*@sin(x);min=@smax(f(1),f(2),f(3));@bnd(0,x,1.57); 限制0≤x≤1.57end4.3金融函數(shù)1.@fpa(I,n)-貸款買房問題貸款金額50000元,貸款年利率5.31%,采取分期付款方式〔每年年末還固定金額,直至還清〕。問擬貸款10年,每年需歸還多少元?Lingo代碼如下:50000=x*@fpa(.0531,10);答案是x=6573.069元。4.3金融函數(shù)2.@fpl(I,n)--函數(shù)解釋返回如下情形的凈現(xiàn)值:單位時段利率為I,第n個時段支付單位費用。@fpl(I,n)的計算公式為:細(xì)心的同學(xué)可以發(fā)現(xiàn)這兩個函數(shù)間的關(guān)系:4.4概率函數(shù)1.@pbn(p,n,x) 二項分布的累積分布函數(shù) 當(dāng)n和〔或〕x不是整數(shù)時,用線性插值法進(jìn)行計算。2.@pcx(n,x)自由度為n的分布的累積分布函數(shù)。3.@peb(a,x)當(dāng)?shù)竭_(dá)負(fù)荷為a,效勞系統(tǒng)有x個效勞器且允許無窮排隊時的Erlang繁忙概率。4.@pel(a,x)當(dāng)?shù)竭_(dá)負(fù)荷為a,效勞系統(tǒng)有x個效勞器且不允許排隊時的Erlang繁忙概率。5.@pfd(n,d,x)自由度為n和d的F分布的累積分布函數(shù)。6.@pfs(a,x,c)當(dāng)負(fù)荷上限為a,顧客數(shù)為c,平行效勞器數(shù)量為x時,有限源的Poisson效勞系統(tǒng)的等待或返修顧客數(shù)的期望值。a是顧客數(shù)乘以平均效勞時間,再除以平均返修時間。當(dāng)c和〔或〕x不是整數(shù)時,采用線性插值進(jìn)行計算。

4Lingo函數(shù)

4.4概率函數(shù)(續(xù))7.@phg(pop,g,n,x) 超幾何〔Hypergeometric〕分布的累積分布函數(shù)。pop表示產(chǎn)品總數(shù),g是正品數(shù)。從所有產(chǎn)品中任意取出n〔n≤pop〕件。pop,g,n和x都可以是非整數(shù),這時采用線性插值進(jìn)行計算。8.@ppl(a,x) Poisson分布的線性損失函數(shù),即返回max(0,z-x)的期望值,其中隨機變量z服從均值為a的Poisson分布。9.@pps(a,x) 均值為a的Poisson分布的累積分布函數(shù)。當(dāng)x不是整數(shù)時,采用線性插值進(jìn)行計算。10.@psl(x) 單位正態(tài)線性損失函數(shù),即返回max(0,z-x)的期望值,其中隨機變量z服從標(biāo)準(zhǔn)正態(tài)分布。11.@psn(x) 標(biāo)準(zhǔn)正態(tài)分布的累積分布函數(shù)。12.@ptd(n,x) 自由度為n的t分布的累積分布函數(shù)。

4Lingo函數(shù)

4.4概率函數(shù)(續(xù))13.@qrand(seed)產(chǎn)生服從(0,1)區(qū)間的擬隨機數(shù)。@qrand只允許在模型的數(shù)據(jù)局部使用,它將用擬隨機數(shù)填滿集屬性。通常,聲明一個m×n的二維表,m表示運行實驗的次數(shù),n表示每次實驗所需的隨機數(shù)的個數(shù)。在行內(nèi),隨機數(shù)是獨立分布的;在行間,隨機數(shù)是非常均勻的。這些隨機數(shù)是用“分層取樣”的方法產(chǎn)生的。4.5變量界定函數(shù)變量界定函數(shù)實現(xiàn)對變量取值范圍的附加限制,共4種:@bin(x)限制x為0或1@bnd(L,x,U)限制L≤x≤U@free(x)取消對變量x的默認(rèn)下界為0的限制,即x可以取任意實數(shù)@gin(x)限制x為整數(shù)在默認(rèn)情況下,Lingo規(guī)定變量是非負(fù)的,也就是說下界為0,上界為+∞。@free取消了默認(rèn)的下界為0的限制,使變量也可以取負(fù)值。@bnd用于設(shè)定一個變量的上下界,它也可以取消默認(rèn)下界為0的約束。4.6集處理函數(shù)@in???1.@in(set_name,primitive_index_1[,primitive_index_2,…]) 如果元素在指定集中,返回1;否那么返回0。全集為I,B是I的一個子集,C是B的補集。sets:I/x1..x4/;B(I)/x2/;C(I)|#not#@in(B,&1);endsets4.6集處理函數(shù)2.@index([set_name,]primitive_set_element)該函數(shù)返回在集set_name中原始集成員primitive_set_element的索引。如果set_name被忽略,那么Lingo將返回與primitive_set_element匹配的第一個原始集成員的索引。如果找不到,那么產(chǎn)生一個錯誤。sets:!如何確定集成員(B,Y)屬于派生集S3。S1/ABC/;S2/XYZ/;S3(S1,S2)/AX,AZ,BY,CX/;endsetsX=@in(S3,@index(S1,B),@index(S2,Y));???sets: !說明有時為@index指定集是必要的。girls/debble,sue,alice/;boys/bob,joe,sue,fred/;endsetsI1=@index(sue);!I1的值是2I2=@index(boys,sue);!I2的值是3建議在使用@index函數(shù)時最好指定集。3.@wrap(index,limit)利用@wrap函數(shù)可以將變量的值限制在集合的索引范圍之內(nèi)。在集合循環(huán)函數(shù)里,當(dāng)集合的最后一個元素出現(xiàn)后,使用@wrap函數(shù)就可以轉(zhuǎn)到集合的第一個元素的索引。該函數(shù)返回j=index-k*limit,其中k是一個整數(shù),取適當(dāng)值保證j落在區(qū)間[1,limit]內(nèi)。該函數(shù)相當(dāng)于index模limit再加1。該函數(shù)在循環(huán)、多階段方案編制中特別有用。(參見算例和職員分配模型)類似C++取模函數(shù):doublej=fmod(index,limit);4.@size(set_name)該函數(shù)返回集set_name的成員個數(shù)。在模型中明確給出集大小時最好使用該函數(shù)。它的使用使模型更加數(shù)據(jù)中立,集大小改變時也更易維護。sets:S1/ABC/;S2/XYZ/;S3(S1,S2)/AX,AZ,BY,CX/;S4(S1,S2);EndsetsA=@size(S1);B=@size(S2);C=@size(S3);D=@size(S4);用Lingo看看ABCD應(yīng)該是多少?4.7集循環(huán)函數(shù)〔重要〕集循環(huán)函數(shù)遍歷整個集進(jìn)行操作。其語法為@function(setname[(set_index_list)[|conditional_qualifier]]:expression_list);@function相應(yīng)于下面羅列的四個集循環(huán)函數(shù)之一〔@for、@sum、@max、@min〕;setname是要遍歷的集;set_index_list是集索引列表;conditional_qualifier是用來限制集循環(huán)函數(shù)的范圍,當(dāng)集循環(huán)函數(shù)遍歷集的每個成員時,LINGO都要對conditional_qualifier進(jìn)行評價,假設(shè)結(jié)果為真,那么對該成員執(zhí)行@function操作,否那么跳過,繼續(xù)執(zhí)行下一次循環(huán)。4.7集循環(huán)函數(shù)〔續(xù)〕集循環(huán)函數(shù)遍歷整個集進(jìn)行操作。其語法為@function(setname[(set_index_list)[|conditional_qualifier]]:expression_list);expression_list是被應(yīng)用到每個集成員的表達(dá)式列表,當(dāng)用的是@for函數(shù)時,expression_list可以包含多個表達(dá)式,其間用逗號隔開。這些表達(dá)式將被作為約束加到模型中。當(dāng)使用其余的三個集循環(huán)函數(shù)時,expression_list只能有一個表達(dá)式。如果省略set_index_list,那么在expression_list中引用的所有屬性的類型都是setname集。1.@for該函數(shù)用來產(chǎn)生對集成員的約束。基于建模語言的標(biāo)量需要顯式輸入每個約束,不過@for函數(shù)允許只輸入一個約束,然后LINGO自動產(chǎn)生每個集成員的約束。例如產(chǎn)生序列〔程序演示,產(chǎn)生什么序列〕model:sets:number/1..5/:x;endsets@for(number(I):x(I)=I^2);end2.@sum該函數(shù)返回遍歷指定的集成員的一個表達(dá)式的和。例如:求向量[5,1,3,4,6,10]前5個數(shù)的和。model:data:N=6;enddatasets:number/1..N/:x;endsetsdata:x=5134610;enddatas=@sum(number(I)|I#le#5:x);end3.@min和@max返回指定的集成員的一個表達(dá)式的最小值或最大值。例:求向量[5,1,3,4,6,10]前5個數(shù)的最小值,后3個數(shù)的最大值。model:data:N=6;enddatasets:number/1..N/:x;endsetsdata:x=5134610;enddataminv=@min(number(I)|I#le#5:x);maxv=@max(number(I)|I#ge#N-2:x);end集循環(huán)函數(shù)的復(fù)雜例子職員時序安排模型一項工作一周7天都需要有人〔比方護士工作〕,每天〔周一至周日〕所需的最少職員數(shù)為20、16、13、16、19、14和12,并要求每個職員一周連續(xù)工作5天〔注意這里我們考慮穩(wěn)定后的情況,不考慮臨時工〕。在滿足每天對職員需求的前提下,需要決定每天需要雇傭多少職員,以使一周所雇傭的總?cè)藬?shù)最少。如何構(gòu)造對應(yīng)的Lingo模型?〔1〕:相應(yīng)的集合是什么?其屬性又是什么?〔2〕:哪個屬性是數(shù)據(jù)及哪個屬性是變量?〔3〕:如何確定目標(biāo)函數(shù)及約束條件?相應(yīng)的集合是什么?其屬性又是什么?我們只有一個根本集合:一周的每一天。SETS: DAYS/MONTUEWEDTHUFRISATSUN/:REQUIRED,START;ENDSETSDAYS的兩個屬性。第一個是每天對職員的需求,第二個是每天開始雇傭的職員的人數(shù)。分別記為REQUIRED和START。哪個屬性是數(shù)據(jù)及哪個屬性是變量?REQUIRED顯然是給定的,所以它是數(shù)據(jù);START是我們要確定的,所以它是變量。一旦確定了哪個屬性是數(shù)據(jù),就可以對數(shù)據(jù)進(jìn)行賦值。DATA: REQUIRED=20161316191412;ENDDATA確定目標(biāo)函數(shù):如何確定目標(biāo)函數(shù)及約束條件?MIN=@SUM(DAYS(I):START(I));約束條件:每天當(dāng)班的職員數(shù)要大于等于當(dāng)天對職員的需求數(shù),對一周的每天都是如此?!懊刻飚?dāng)班的職員數(shù)”如何計算?“每天當(dāng)班的職員數(shù)”如何計算?為了計算出當(dāng)天工作的職員人數(shù),我們要求出當(dāng)天開始雇傭的職員人數(shù)及前4天開始雇傭人數(shù)之和。5天前和6天前開始雇傭的人數(shù)不得記入。轉(zhuǎn)化成為Lingo語言:@FOR(DAYS(J): @SUM(DAYS(I)|I#LE#5:START(J-I+1)) >=REQUIRED(J));眼睛要睜大點,看清楚!為什么會出錯?研究一下周四的情況,進(jìn)行舉例說明:星期四在DAYS中的索引為4,將星期四那天工作的職員人數(shù)的約束寫出來是:START(4-1+1)+START(4-2+1)+START(4-3+1)+START(4-4+1)+START(4-5+1)>=REQUIRED(4);化簡后為:START(4)+START(3)+START(2)+START(1)+START(0)>=REQUIRED(4);START(0)索引是越界的!對于小于等于零的任何索引都對應(yīng)到一周的某一天。具體地說,0對應(yīng)SUN(7);-1對應(yīng)SAT(6)……如何來完成這個任務(wù)?--它就是@WRAP!@FOR(DAYS(J): @SUM(DAYS(I)|I#LE#5: START(@WRAP(J-I+1,7))) >=REQUIRED(J));對于多周期方案模型中的索引問題,@WRAP正好適用。最終的LINGO優(yōu)化模型:SETS:!定義集合;DAYS/MONTUEWEDTHUFRISATSUN/:REQUIRED,START;ENDSETSDATA:!給集合里的數(shù)據(jù)局部賦值;REQUIRED=20161316191412;ENDDATAMIN=@SUM(DAYS(I):START(I));!給定目標(biāo)函數(shù);!給出約束條件:約束條件:每天當(dāng)班的職員數(shù)要大于等于當(dāng)天對職員的需求數(shù);@FOR(DAYS(J): @SUM(DAYS(I)|I#LE#5: START(@WRAP(J-I+1,7))) >=REQUIRED(J));職員的雇傭方案:星期MONTUEWEDTHUFRISATSUN開始雇傭人數(shù)8206330從求解報告的需求約束盈余看,每一天的松弛量都是零。這意味著職員人數(shù)都不超過需求,即每天工作的人數(shù)與需求正好相等〔沒有閑人〕。如果采用人工排布會是什么樣子?配料模型:

在該模型中,人們將幾種物品混合在一起制成多種產(chǎn)品。各種產(chǎn)品對各種物品都有一個最低的質(zhì)量要求。在滿足質(zhì)量要求的前提下,如何確定產(chǎn)品的數(shù)量以獲得最大利潤。CHESS食品公司銷售4種品牌的堅果混合制品。它們的名字是Pawn〔士兵〕、Knight〔武士〕、Bishop〔主教〕和King〔國王〕。每一種產(chǎn)品對Peanuts〔花生〕和Cashews〔腰果〕有一定的比例要求。如以下出了各種產(chǎn)品每磅所含兩種堅果的重量〔單位:盎司〕,以及每種產(chǎn)品的銷售價格。PawnKnightBishopKingPeanuts(oz.)151062Cashews(oz.)161014SellingPrice2345產(chǎn)品質(zhì)量要求及單價CHESS食品公司每天可以從供給商那里得到70磅的花生〔Peanuts〕和250磅的腰果〔Cashews〕。我們的問題:每天在不超過供給量的前提下,每種品牌的產(chǎn)品各生產(chǎn)多少?可使得總收益到達(dá)最大?注意:1磅=16盎司=0.454千克,1盎司=28.375克如何構(gòu)造集合?

如何構(gòu)造目標(biāo)函數(shù)?

如何構(gòu)造約束?SETS:

NUTS/PEANUTS,CASHEWS/:SUPPLY;

BRANDS/PAWN,KNIGHT,BISHOP,KING/:PRICE,PRODUCE;

ENDSETS

集合NUTS有唯一一個屬性SUPPLY,用于表示每天的堅果供給量〔磅〕;

集合BRANDS有兩個屬性PRICE和PRODUCE。這里,PRICE表示每種產(chǎn)品的銷售價格,PRODUCE是決策變量,表示每天每種產(chǎn)品應(yīng)該生產(chǎn)多少。

此外,我們還需要一個集合。為了輸入品牌公式,需要構(gòu)造一個二維表格,構(gòu)造一個NUTS和BRANDS的派生集合。

FORMULA(NUTS,BRANDS):OUNCES;

集合名稱為FORMULA,它有唯一一個屬性O(shè)UNCES。定義數(shù)據(jù)域:

DATA:

SUPPLY=750250;

PRICE=2345;

OUNCES=151062

161014;

ENDDATA

目標(biāo)函數(shù):總收益最大

MAX=@SUM(BRANDS(I):PRICE(I)*PRODUCE(I));

約束條件:每天使用的堅果數(shù)量不超過每天的供給量

@FOR(NUTS(I):

@SUM(BRANDS(J):

OUNCES(I,J)*PRODUCE(J)/16)<=SUPPLY(I));

左邊的求和除以16是將單位“盎司”轉(zhuǎn)換為“磅”SETS:NUTS/PEANUTS,CASHEWS/:SUPPLY;BRANDS/PAWN,KNIGHT,BISHOP,KING/:PRICE,PRODUCE;FORMULA(NUTS,BRANDS):OUNCES;ENDSETSDATA:SUPPLY=750250;PRICE=2345;OUNCES=151062161014;ENDDATAMAX=@SUM(BRANDS(I):PRICE(I)*PRODUCE(I));@FOR(NUTS(I):@SUM(BRANDS(J):OUNCES(I,J)*PRODUCE(J)/16)<=SUPPLY(I));用Lingo求解背包問題

構(gòu)造集合

SETS:ITEMS/ANT_REPEL,BEER,BLANKET,BRATWURST,BROWNIES,FRISBEE,SALAD,WATERMELON/:

INCLUDE,WEIGHT,RATING;ENDSETS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論