lingo軟件及其應(yīng)用中科院_第1頁(yè)
lingo軟件及其應(yīng)用中科院_第2頁(yè)
lingo軟件及其應(yīng)用中科院_第3頁(yè)
lingo軟件及其應(yīng)用中科院_第4頁(yè)
lingo軟件及其應(yīng)用中科院_第5頁(yè)
已閱讀5頁(yè),還剩242頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

常用數(shù)學(xué)軟件選講2第八章Lingo軟件及其應(yīng)用1.Lingo中的集

2.模型的數(shù)據(jù)部分和初始部分3.Lingo函數(shù)

4.LingoWindows命令

5.Lingo與電子制表軟件的連接

6.Lingo與數(shù)據(jù)庫(kù)的連接7.Lingo與VisualC++的連接8.利用Lingo開(kāi)發(fā)高級(jí)模型34

2Lingo中的集

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

2Lingo中的集

2.2什么是集(續(xù))Lingo有兩種類型的集:

原始集(primitiveset)和派生集(derivedset)一個(gè)原始集是由一些最基本的對(duì)象組成的。例如:集合WAREHOUSE是有6個(gè)貨棧組成

集合VENDERS是由8個(gè)銷售商組成8

2Lingo中的集

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

2Lingo中的集

2.3.1定義原始集定義原始集的語(yǔ)法集的名字[/集的成員/][:集成員的屬性];注意:用“[]”表示該部分內(nèi)容可選。

如果集成員放在集定義中,那么對(duì)它們可采取顯式羅列和隱式羅列兩種方式。如果集成員不放在集定義中,那么可以在隨后的數(shù)據(jù)部分定義它們。13

2Lingo中的集

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

2Lingo中的集

2.3.1定義原始集(續(xù))②當(dāng)隱式羅列成員時(shí),不必羅列出每個(gè)集成員??刹捎萌缦抡Z(yǔ)法:集的名字/集的成員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,Jan200215

2Lingo中的集

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

16

2Lingo中的集

原始集和C++語(yǔ)言的類比17

2Lingo中的集

2.3.2定義派生集定義派生集的語(yǔ)法集的名字(父集名稱列表)[/集的成員/][:集成員的屬性];注意:用“[]”表示該部分內(nèi)容可選。

父集名稱列表是已定義的集的列表,多個(gè)時(shí)必須用逗號(hào)隔開(kāi)。如果沒(méi)有指定成員列表,那么Lingo會(huì)自動(dòng)創(chuàng)建父集成員的所有組合作為派生集的成員(參見(jiàn)下頁(yè)的例子)。派生集的父集既可以是原始集,也可以是其它的派生集。

18

2Lingo中的集

2.3.2定義派生集(續(xù))編號(hào)成員編號(hào)成員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;endsets

Lingo生成了三個(gè)父集的所有組合共八組作為allowed集的成員:19

2Lingo中的集

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

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

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

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

2Lingo中的集

設(shè)置成員資格過(guò)濾器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;enddata21

2Lingo中的集

設(shè)置成員資格過(guò)濾器(續(xù))用豎線(|)來(lái)標(biāo)記一個(gè)成員資格過(guò)濾器的開(kāi)始。#eq#是邏輯運(yùn)算符,用來(lái)判斷是否“相等”,可參考§4.

&1可看作派生集的第1個(gè)原始父集的索引,它取遍該原始父集的所有成員;&2可看作派生集的第2個(gè)原始父集的索引,它取遍該原始父集的所有成員;&3,&4,……,以此類推。注意:如果派生集B的父集是另外的派生集A,那么上面所說(shuō)的原始父集是集A向前回溯到最終的原始集,其順序保持不變,并且派生集A的過(guò)濾器對(duì)派生集B仍然有效。因此,派生集的索引個(gè)數(shù)是最終原始父集的個(gè)數(shù),索引的取值是從原始父集到當(dāng)前派生集所作限制的總和。

22

2Lingo中的集

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

2Lingo中的集

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

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

1、熟悉Lingo的安裝2、簡(jiǎn)單熟悉Lingo的語(yǔ)法規(guī)范,并可以解題25算例:某玻璃制造廠與三個(gè)不同地點(diǎn)的純堿供應(yīng)商簽訂合同,由他們供貨給三個(gè)分廠,條件是不超過(guò)合同所定的數(shù)量,但必須滿足生產(chǎn)需要。該問(wèn)題如表3-1所示。問(wèn)題中所給費(fèi)率是每個(gè)供應(yīng)商到每個(gè)工廠之間最短路徑的運(yùn)輸費(fèi)率。求運(yùn)輸方案2Lingo中的集上機(jī)作業(yè)26工廠1工廠2工廠3供應(yīng)量供應(yīng)商1x11x12x13400供應(yīng)商2x21x22x23700供應(yīng)商3x31x32x33500需求量6005005003-1運(yùn)輸問(wèn)題-供需情況供銷平衡2Lingo中的集上機(jī)作業(yè)27

3模型的數(shù)據(jù)部分和初始部分

在處理模型的數(shù)據(jù)時(shí),需要為集指派一些成員并且在Lingo求解模型之前為集的某些屬性指定值。為此,Lingo為用戶提供了兩個(gè)可選部分:輸入集成員和數(shù)據(jù)的數(shù)據(jù)部分(DataSection)和為決策變量設(shè)置初始值的初始部分(InitSection)。3.1模型的數(shù)據(jù)部分3.2模型的初始部分28

3模型的數(shù)據(jù)部分和初始部分

3.1模型的數(shù)據(jù)部分為什么需要數(shù)據(jù)部分?jǐn)?shù)據(jù)部分入門數(shù)據(jù)部分提供了模型相對(duì)靜止部分和數(shù)據(jù)分離的可能性。顯然,這對(duì)模型的維護(hù)和維數(shù)的縮放非常便利。數(shù)據(jù)部分以關(guān)鍵字“data:”開(kāi)始,以關(guān)鍵字“enddata”結(jié)束。在這里,可以指定集成員、集的屬性。其語(yǔ)法如下:對(duì)象列=數(shù)值列;

29數(shù)據(jù)部分入門(續(xù))對(duì)象列:包含要指定值的屬性名數(shù)值列:包含要分配給對(duì)象列中的對(duì)象的值,用逗號(hào)或空格隔開(kāi)。注意屬性值的個(gè)數(shù)必須等于集成員的個(gè)數(shù)??聪旅娴睦?。sets:set1/A,B,C/:X,Y;endsetsdata:

X=1,2,3;

Y=4,5,6;enddata在集set1中定義了兩個(gè)屬性X和Y。X的三個(gè)值是1、2和3,Y的三個(gè)值是4、5和6。30數(shù)據(jù)部分入門(續(xù))也可采用如下例子中的復(fù)合數(shù)據(jù)聲明(datastatement):sets:set1/A,B,C/:X,Y;endsetsdata:X,Y=142536;enddata看到這個(gè)例子,可能會(huì)認(rèn)為X被指定了1、4和2三個(gè)值,因?yàn)樗鼈兪菙?shù)值列中前三個(gè),而正確的答案是1、2和3。假設(shè)對(duì)象列有n個(gè)對(duì)象,Lingo在為對(duì)象指定值時(shí),首先在n個(gè)對(duì)象的第1個(gè)索引處依次分配數(shù)值列中的前n個(gè)對(duì)象,然后在n個(gè)對(duì)象的第2個(gè)索引處依次分配數(shù)值列中緊接著的n個(gè)對(duì)象,……,以此類推。模型的所有數(shù)據(jù)——屬性值和集成員——被單獨(dú)放在數(shù)據(jù)部分,這可能是最規(guī)范的數(shù)據(jù)輸入方式。313.1模型的數(shù)據(jù)部分參數(shù)在數(shù)據(jù)部分也可以指定一些標(biāo)量變量(scalarvariables)。當(dāng)一個(gè)標(biāo)量變量在數(shù)據(jù)部分確定時(shí),稱之為參數(shù)。data:interest_rate=.085;enddata模型中用利率8.5%作為一個(gè)參數(shù)也可以同時(shí)指定多個(gè)參數(shù)。data:interest_rate,inflation_rate=.085.03;enddata323.1模型的數(shù)據(jù)部分

實(shí)時(shí)數(shù)據(jù)處理在某些情況,對(duì)于模型中的某些數(shù)據(jù)并不是定值,我們把這種情況稱為實(shí)時(shí)數(shù)據(jù)處理(whatifanalysis)data:interest_rate,inflation_rate=.085?;enddata333.1模型的數(shù)據(jù)部分

指定屬性為一個(gè)值可以在數(shù)據(jù)聲明的右邊輸入一個(gè)值來(lái)把所有的成員的該屬性指定為一個(gè)值。sets:days/MO,TU,WE,TH,FR,SA,SU/:needs;endsetsdata:

needs=20;enddataLingo將用20指定days集的所有成員的needs屬性。343.1模型的數(shù)據(jù)部分指定屬性為一個(gè)值(續(xù))對(duì)于多個(gè)屬性的情形,也可以指定一個(gè)值sets:days/MO,TU,WE,TH,FR,SA,SU/:needs,cost;endsetsdata:

needscost=20100;enddata353.1模型的數(shù)據(jù)部分?jǐn)?shù)據(jù)部分的未知數(shù)值有時(shí)只想為一個(gè)集的部分成員的某個(gè)屬性指定值,而讓其余成員的該屬性保持未知,以便讓Lingo去求出它們的最優(yōu)值。在數(shù)據(jù)聲明中輸入兩個(gè)相連的逗號(hào)表示該位置對(duì)應(yīng)的集成員的屬性值未知。兩個(gè)逗號(hào)間可以有空格。sets:years/1..5/:capacity;endsetsdata:

capacity=,34,20,,;enddata屬性capacity的第2個(gè)和第3個(gè)值分別為34和20,其余的未知。363.2模型的初始部分模型的初始數(shù)值初始部分是Lingo提供的一個(gè)可選部分。在初始部分中,可以輸入初始聲明(initializationstatement)。初始部分輸入的值僅被Lingo求解器當(dāng)作初始點(diǎn)來(lái)用,并且僅僅對(duì)非線性模型有用。一個(gè)初始部分以“init:”開(kāi)始,以“endinit”結(jié)束。init:X,Y=0,.1;endinitY=@log(X);X^2+Y^2<=1;好的初始點(diǎn)會(huì)減少模型的求解時(shí)間(看迭代次數(shù))。37

4Lingo函數(shù)

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

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

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

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

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

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

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

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

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

輔助函數(shù):各種雜類函數(shù)384.1基本運(yùn)算符4.1.1算數(shù)運(yùn)算符算術(shù)運(yùn)算符是針對(duì)數(shù)值進(jìn)行操作的。LINGO提供了5種二元運(yùn)算符:^乘方﹡乘/除﹢加﹣減Lingo唯一的一元算術(shù)運(yùn)算符是取反函數(shù)“﹣”。算術(shù)運(yùn)算符示例:2﹣5/3,(2﹢4)/5等等。394.1.2邏輯運(yùn)算符在Lingo中,邏輯運(yùn)算符主要用于集循環(huán)函數(shù)的條件表達(dá)式中,來(lái)控制在函數(shù)中哪些集成員被包含,哪些被排斥。在創(chuàng)建稀疏集時(shí)用在成員資格過(guò)濾器中。(#not#否定該操作數(shù)的邏輯值,#not#是一個(gè)一元運(yùn)算符)運(yùn)算符為TRUE時(shí)條件運(yùn)算符為TRUE時(shí)條件#eq#若兩個(gè)運(yùn)算數(shù)相等#ne#若兩個(gè)運(yùn)算符不相等#gt#若左邊的運(yùn)算符嚴(yán)格大于右邊的運(yùn)算符#ge#若左邊的運(yùn)算符大于或等于右邊的運(yùn)算符#lt#若左邊的運(yùn)算符嚴(yán)格小于右邊的運(yùn)算符#le#若左邊的運(yùn)算符小于或等于右邊的運(yùn)算符#and#僅當(dāng)兩個(gè)參數(shù)都為true時(shí)#or#僅當(dāng)兩個(gè)參數(shù)都為true時(shí)404.1.2邏輯運(yùn)算符(續(xù))這些運(yùn)算符的優(yōu)先級(jí)由高到低為:高

#not##eq##ne##gt##ge##lt##le#低

#and##or#邏輯運(yùn)算符示例:2#gt#3#and#4#gt#2,其結(jié)果為假(0)。414.1.3關(guān)系運(yùn)算符(1)Lingo有三種關(guān)系運(yùn)算符:“=”、“<=”和“>=”。(2)Lingo并不支持嚴(yán)格小于和嚴(yán)格大于關(guān)系運(yùn)算符。(3)Lingo中還能用“<”表示小于等于關(guān)系,“>”表示大于等于關(guān)系。(4)如讓A嚴(yán)格小于B,那么:A+ε<=B,424.2數(shù)學(xué)函數(shù)Lingo提供了大量的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù):@abs(x)返回x的絕對(duì)值@sin(x)返回x的正弦值,x采用弧度制@cos(x)返回x的余弦值@tan(x)返回x的正切值@exp(x)返回常數(shù)e的x次方@log(x)返回x的自然對(duì)數(shù)@lgm(x)返回x的gamma函數(shù)的自然對(duì)數(shù)@sign(x)如果x<0返回-1;否則,返回1@floor(x)返回x的整數(shù)部分。當(dāng)x>=0時(shí),返回不超過(guò)x的最大整數(shù);當(dāng)x<0時(shí),返回不低于x的最大整數(shù)。@smax(x1,x2,…,xn)返回x1,x2,…,xn中的最大值@smin(x1,x2,…,xn)返回x1,x2,…,xn中的最小值434.2數(shù)學(xué)函數(shù) - 模型實(shí)例A B C DE a b x給定一個(gè)直角三角形,求包含該三角形的最小正方形。其中:求最小的正方形就相當(dāng)于求如下的最優(yōu)化問(wèn)題:

444.2數(shù)學(xué)函數(shù) - 模型實(shí)例(續(xù))Lingo代碼如下:model:sets:object/1..3/:f;endsetsdata:a,b=3,4;!兩個(gè)直角邊長(zhǎng),修改很方便;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.57end454.3金融函數(shù)1.@fpa(I,n)-貸款買房問(wèn)題貸款金額50000元,貸款年利率5.31%,采取分期付款方式(每年年末還固定金額,直至還清)。問(wèn)擬貸款10年,每年需償還多少元?Lingo代碼如下:50000=x*@fpa(.0531,10);答案是x=6573.069元。464.3金融函數(shù)2.@fpl(I,n)--函數(shù)解釋返回如下情形的凈現(xiàn)值:?jiǎn)挝粫r(shí)段利率為I,第n個(gè)時(shí)段支付單位費(fèi)用。@fpl(I,n)的計(jì)算公式為:細(xì)心的同學(xué)可以發(fā)現(xiàn)這兩個(gè)函數(shù)間的關(guān)系:474.4概率函數(shù)1.@pbn(p,n,x)

二項(xiàng)分布的累積分布函數(shù) 當(dāng)n和(或)x不是整數(shù)時(shí),用線性插值法進(jìn)行計(jì)算。2.@pcx(n,x)

自由度為n的分布的累積分布函數(shù)。3.@peb(a,x)當(dāng)?shù)竭_(dá)負(fù)荷為a,服務(wù)系統(tǒng)有x個(gè)服務(wù)器且允許無(wú)窮排隊(duì)時(shí)的Erlang繁忙概率。4.@pel(a,x)當(dāng)?shù)竭_(dá)負(fù)荷為a,服務(wù)系統(tǒng)有x個(gè)服務(wù)器且不允許排隊(duì)時(shí)的Erlang繁忙概率。5.@pfd(n,d,x)

自由度為n和d的F分布的累積分布函數(shù)。6.@pfs(a,x,c)當(dāng)負(fù)荷上限為a,顧客數(shù)為c,平行服務(wù)器數(shù)量為x時(shí),有限源的Poisson服務(wù)系統(tǒng)的等待或返修顧客數(shù)的期望值。a是顧客數(shù)乘以平均服務(wù)時(shí)間,再除以平均返修時(shí)間。當(dāng)c和(或)x不是整數(shù)時(shí),采用線性插值進(jìn)行計(jì)算。48

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ù),這時(shí)采用線性插值進(jìn)行計(jì)算。8.@ppl(a,x) Poisson分布的線性損失函數(shù),即返回max(0,z-x)的期望值,其中隨機(jī)變量z服從均值為a的Poisson分布。9.@pps(a,x) 均值為a的Poisson分布的累積分布函數(shù)。當(dāng)x不是整數(shù)時(shí),采用線性插值進(jìn)行計(jì)算。10.@psl(x) 單位正態(tài)線性損失函數(shù),即返回max(0,z-x)的期望值,其中隨機(jī)變量z服從標(biāo)準(zhǔn)正態(tài)分布。11.@psn(x) 標(biāo)準(zhǔn)正態(tài)分布的累積分布函數(shù)。12.@ptd(n,x) 自由度為n的t分布的累積分布函數(shù)。49

4Lingo函數(shù)

4.4概率函數(shù)(續(xù))13.@qrand(seed)產(chǎn)生服從(0,1)區(qū)間的擬隨機(jī)數(shù)。@qrand只允許在模型的數(shù)據(jù)部分使用,它將用擬隨機(jī)數(shù)填滿集屬性。通常,聲明一個(gè)m×n的二維表,m表示運(yùn)行實(shí)驗(yàn)的次數(shù),n表示每次實(shí)驗(yàn)所需的隨機(jī)數(shù)的個(gè)數(shù)。在行內(nèi),隨機(jī)數(shù)是獨(dú)立分布的;在行間,隨機(jī)數(shù)是非常均勻的。這些隨機(jī)數(shù)是用“分層取樣”的方法產(chǎn)生的。

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

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

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

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

NUTS/PEANUTS,CASHEWS/:SUPPLY;

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

ENDSETS

集合NUTS有唯一一個(gè)屬性SUPPLY,用于表示每天的堅(jiān)果供應(yīng)量(磅);

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

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

FORMULA(NUTS,BRANDS):OUNCES;

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

DATA:

SUPPLY=750250;

PRICE=2345;

OUNCES=151062

161014;

ENDDATA

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

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

約束條件:每天使用的堅(jiān)果數(shù)量不超過(guò)每天的供應(yīng)量

@FOR(NUTS(I):

@SUM(BRANDS(J):

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

左邊的求和除以16是將單位“盎司”轉(zhuǎn)換為“磅”75SETS: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));7677用Lingo求解背包問(wèn)題

78構(gòu)造集合

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

INCLUDE,WEIGHT,RATING;ENDSETS

屬性INCLUDE為一個(gè)0-1變量,說(shuō)明該物品是否包含在背包中,用于野餐。WEIGHT說(shuō)明每一物品的重量,而RATING存儲(chǔ)著該物品的指數(shù)值79構(gòu)造模型(目標(biāo)函數(shù))

MAX=@SUM(ITEMS:RATING*INCLUDE);在這里沒(méi)有明確說(shuō)明ITEMS的具體變量,此處是要對(duì)所有的ITEMS進(jìn)行操作80SETS:ITEMS/ANT_REPEL,BEER,BLANKET,BRATWURST,BROWNIES,FRISBEE,SALAD,WATERMELON/:INCLUDE,WEIGHT,RATING;ENDSETSDATA:WEIGHTRATING=1239433831016541010;KNAPSACK_CAPACITY=15;ENDDATAMAX=@SUM(ITEMS:RATING*INCLUDE);@SUM(ITEMS:WEIGHT*INCLUDE)<=KNAPSACK_CAPACITY;@FOR(ITEMS:@BIN(INCLUDE));81PERT(工程評(píng)價(jià)與審查技術(shù))模型:我們將建立一個(gè)PERT模型,以確定在一個(gè)新產(chǎn)品的生產(chǎn)流程中的關(guān)鍵作業(yè)線路。PERT技術(shù)很簡(jiǎn)單,但是很實(shí)用。該技術(shù)源于20世紀(jì)60年代。當(dāng)時(shí)主要是為了幫助管理人員跟蹤大工程的進(jìn)展。82假設(shè)WirelessWidget公司計(jì)劃向市場(chǎng)投放一種新產(chǎn)品--TheSolarWidget。為了保證準(zhǔn)時(shí)投放市場(chǎng),WirelessWidget公司要對(duì)主要作業(yè)進(jìn)行PERT分析,其目的是找出關(guān)鍵作業(yè)路線。位于關(guān)鍵路線上的作業(yè)必須按時(shí)完成,這樣才能保證WirelessWidget公司的產(chǎn)品及時(shí)投放市場(chǎng),各項(xiàng)作業(yè)及預(yù)計(jì)完成時(shí)間如下:

Task(作業(yè))Weeks(時(shí)間)FinalizeDesign(確定方案)10ForecastDemand(預(yù)測(cè)需求)14SurveyCompetition(調(diào)查競(jìng)爭(zhēng))3SetPrice(確定價(jià)格)3ScheduleProductionRun(確定生產(chǎn)時(shí)間)7CostOut(成本核算)4TrainSalesmen(訓(xùn)練銷售人員)1083產(chǎn)品作業(yè)優(yōu)先關(guān)系84可以構(gòu)造如下的集合:TASKS/DESIGN,FORECAST,SURVEY,PRICE,SCHEDULE,COSTOUT,TRAIN/:TIME,ES,LS,SLACK;對(duì)于集合的4個(gè)屬性,它們的解釋如下:TIME完成作業(yè)的時(shí)間ES作業(yè)最早開(kāi)始時(shí)間LS作業(yè)最遲開(kāi)始時(shí)間SLACK作業(yè)LS和ES之間相差的時(shí)間85在模型中輸入優(yōu)先關(guān)系:PRED(TASK,TASK)/ DESIGN,FORECAST, DESIGN,SURVEY, FORECAST,PRICE, FORECAST,SCHEDULE, SURVEY,PRICE, SCHEDULE,COSTOUT, PRICE,TRAIN, COSTOUT,TRAIN/;86給出數(shù)據(jù)域部分的內(nèi)容DATA:

TIME=10,14,3,3,7,4,10;ENDDATA此時(shí)我們有三個(gè)屬性需要計(jì)算:最早開(kāi)始(ES)、最遲開(kāi)始(LS)和松弛時(shí)間(SLACK)。關(guān)鍵計(jì)算ES、LS,SLACK是兩者之差。87計(jì)算ES(最早開(kāi)始時(shí)間):對(duì)于一項(xiàng)作業(yè)來(lái)說(shuō),作業(yè)t的最早開(kāi)始時(shí)間等于作業(yè)t的所有緊前作業(yè)的最早開(kāi)始時(shí)間加上它自身完成時(shí)間之和的最大值。@FOR(TASKS(J)|J#GT#1: ES(J)=@MAX(PRED(I,J):ES(I)+TIME(I)));88計(jì)算LS(最遲開(kāi)始時(shí)間)

:對(duì)于一項(xiàng)作業(yè)來(lái)說(shuō),作業(yè)t的最遲開(kāi)始時(shí)間等于作業(yè)t的所有緊后作業(yè)的最早開(kāi)始時(shí)間與作業(yè)t自身完成時(shí)間之差的最小值。@FOR(TASKS(I)|I#LT#LTASK: LS(I)=@MIN(PRED(I,J):ES(J)-TIME(I)));最后一項(xiàng)作業(yè)沒(méi)有緊后作業(yè),忽略89計(jì)算SLACK(松弛時(shí)間):@FOR(TASKS(I):SLACK(I)=LS(I)-ES(I));對(duì)于作業(yè)1的開(kāi)始時(shí)間可以取任意值,咱們?nèi)?。最后一項(xiàng)作業(yè)的最遲開(kāi)始時(shí)間不用計(jì)算。對(duì)于最后一個(gè)作業(yè),最遲開(kāi)始時(shí)間和最早開(kāi)始時(shí)間應(yīng)該是一致的。ES(1)=0;LS(7)=ES(7);90SETS:TASKS/DESIGN,FORECAST,SURVEY,PRICE,SCHEDULE,COSTOUT,TRAIN/:TIME,ES,LS,SLACK;PRED(TASKS,TASKS)/DESIGN,FORECAST,DESIGN,SURVEY,FORECAST,PRICE,FORECAST,SCHEDULE,SURVEY,PRICE,SCHEDULE,COSTOUT,PRICE,TRAIN,COSTOUT,TRAIN/;ENDSETSDATA:TIME=10,14,3,3,7,4,10;ENDDATA@FOR(TASKS(J)|J#GT#1:ES(J)=@MAX(PRED(I,J):ES(I)+TIME(I)));@FOR(TASKS(I)|I#LT#LTASK:LS(I)=@MIN(PRED(I,J):LS(J)-TIME(I)););@FOR(TASKS(I):SLACK(I)=LS(I)-ES(I));ES(1)=0;LTASK=@SIZE(TASKS);LS(LTASK)=ES(LTASK);91匹配模型(采用元素過(guò)濾器):假設(shè)你是公司規(guī)劃部經(jīng)理,該部門有8個(gè)分析專家,正打算搬入新的辦公地點(diǎn)。新辦公地點(diǎn)共有4個(gè)辦公室。你需要將專家配成4對(duì),每一對(duì)分配一個(gè)新的辦公室。基于以往的觀察,有些專家在一起合作得很好,而有些在一起則不行。為了部門安寧,你也許想找出一種匹配,使得在一起的專家發(fā)生沖突的可能性最小。為了這一目的,要計(jì)算出匹配專家的不相容等級(jí)分。等級(jí)從1到10,某個(gè)專家匹配的等級(jí)分為1意味著兩個(gè)專家合作得非常好。反之,等級(jí)分為10意味著兩個(gè)專家不能一起共事。92專家123456781-93421562--1735213---442924----15525-----8766------237-------4專家不相容等級(jí)分由于專家I和專家J的匹配與專家J和專家I的匹配是一樣的,所以我們只給出表中斜對(duì)角線上方的數(shù)據(jù)。大家好好討論如何當(dāng)經(jīng)理的問(wèn)題!93構(gòu)造8個(gè)專家構(gòu)成的基本集合:

ANALYSTS/1..8/;最終含有匹配關(guān)系的派生集合

PAIRS(ANALYSTS,ANALYSTS);由于這個(gè)集合里含有(I,J)、(J,I)以及(I,I)。需要去掉后面兩個(gè)。

PAIRS(ANALYSTS,ANALYSTS)| &2#GT#&1;通過(guò)過(guò)濾器,斜線上方的元素記入了集合PAIRS。94給集合PAIRS定義兩個(gè)屬性,第一個(gè)屬性是匹配不相容等級(jí)分RATING;第二個(gè)屬性表明專家I是否與專家J匹配MATCH。PAIRS(ANALYSTS,ANALYSTS)| &2#GT#&1:RATING,MATCH;我們用下面的數(shù)據(jù)域(由上面列出的不相容等級(jí)分)初始化屬性RATING.DATA:

RATING=9342156 173521 44292 1552 876 23 4;95我們讓MATCH(I,J)取值為1來(lái)表示將專家I與專家J匹配,否則MATCH(I,J)取值為0。這樣,屬性MATCH就是模型的決策變量。我們的目的就是要使得所有最終匹配的不相容等級(jí)分的總和最小。

MIN=@SUM(PAIRS(I,J): RATING(I,J)*MATCH(I,J));約束條件:對(duì)于每一個(gè)專家,他只與另外一個(gè)專家匹配。@FOR(ANALYSTS(I):@SUM(PAIRS(J,K)|J#EQ#I#OR#K#EQ#I: MATCH(J,K))=1);961:采用條件過(guò)濾器(J#EQ#I#OR#K#EQ#I)和@SUM函數(shù)。對(duì)于每一位專家I,我們求出所有含有I的MATCH變量的和并讓其值等于1,保證專家I將與且只與另一個(gè)專家匹配。2:如果I和J匹配,我們就讓MATCH(I,J)取值為1;否則就為0。@BIN函數(shù)限制了MATCH(I,J)的取值。@FOR(PAIRS(I,J):@BIN(MATCH(I,J)));模型的特色97SETS:ANALYSTS/1..8/;PAIRS(ANALYSTS,ANALYSTS)|&2#GT#&1:RATING,MATCH;ENDSETSDATA:RATING=9342156173521442921552876234;ENDDATAMIN=@SUM(PAIRS(I,J):RATING(I,J)*MATCH(I,J));@FOR(ANALYSTS(I):@SUM(PAIRS(J,K)|J#EQ#I#OR#K#EQ#I:MATCH(J,K))=1);@FOR(PAIRS(I,J):@BIN(MATCH(I,J)));98

MIN9MATCH(1,2)+3MATCH(1,3)+4MATCH(1,4)+2MATCH(1,5)+MATCH(1,6)+5MATCH(1,7)+6MATCH(1,8)+MATCH(2,3)+7MATCH(2,4)+3MATCH(2,5)+5MATCH(2,6)+2MATCH(2,7)+MATCH(2,8)+4MATCH(3,4)+4MATCH(3,5)+2MATCH(3,6)+9MATCH(3,7)+2MATCH(3,8)+MATCH(4,5)+5MATCH(4,6)+5MATCH(4,7)+2MATCH(4,8)+8MATCH(5,6)+7MATCH(5,7)+6MATCH(5,8)+2MATCH(6,7)+3MATCH(6,8)+4MATCH(7,8)SUBJECTTO2]MATCH(1,2)+MATCH(1,3)+MATCH(1,4)+MATCH(1,5)+MATCH(1,6)+MATCH(1,7)+MATCH(1,8)=13]MATCH(1,2)+MATCH(2,3)+MATCH(2,4)+MATCH(2,5)+MATCH(2,6)+MATCH(2,7)+MATCH(2,8)=14]MATCH(1,3)+MATCH(2,3)+MATCH(3,4)+MATCH(3,5)+MATCH(3,6)+MATCH(3,7)+MATCH(3,8)=15]MATCH(1,4)+MATCH(2,4)+MATCH(3,4)+MATCH(4,5)+MATCH(4,6)+MATCH(4,7)+MATCH(4,8)=16]MATCH(1,5)+MATCH(2,5)+MATCH(3,5)+MATCH(4,5)+MATCH(5,6)+MATCH(5,7)+MATCH(5,8)=17]MATCH(1,6)+MATCH(2,6)+MATCH(3,6)+MATCH(4,6)+MATCH(5,6)+MATCH(6,7)+MATCH(6,8)=18]MATCH(1,7)+MATCH(2,7)+MATCH(3,7)+MATCH(4,7)+MATCH(5,7)+MATCH(6,7)+MATCH(7,8)=19]MATCH(1,8)+MATCH(2,8)+MATCH(3,8)+MATCH(4,8)+MATCH(5,8)+MATCH(6,8)+MATCH(7,8)=1ENDINTEMATCH(1,2)INTEMATCH(1,3)INTEMATCH(1,4)INTEMATCH(1,5)INTEMATCH(1,6)INTEMATCH(1,7)INTEMATCH(1,8)INTEMATCH(2,3)INTEMATCH(2,4)INTEMATCH(2,5)INTEMATCH(2,6)INTEMATCH(2,7)INTEMATCH(2,8)INTEMATCH(3,4)INTEMATCH(3,5)INTEMATCH(3,6)INTEMATCH(3,7)INTEMATCH(3,8)INTEMATCH(4,5)INTEMATCH(4,6)INTEMATCH(4,7)INTEMATCH(4,8)INTEMATCH(5,6)INTEMATCH(5,7)INTEMATCH(5,8)INTEMATCH(6,7)INTEMATCH(6,8)INTEMATCH(7,8)展開(kāi)后的模型99最終解的情況:前面的解答告訴我們,最優(yōu)匹配的不相容等級(jí)分是6分。最優(yōu)解匹配為:(1,6)、(2,7)、(3,8)、(4,5)對(duì)集合函數(shù)的認(rèn)識(shí)更加深刻?1004.7輸入和輸出函數(shù)輸入和輸出函數(shù)可以把模型和外部數(shù)據(jù)比如文本文件、數(shù)據(jù)庫(kù)和電子表格等連接起來(lái)。1011.@file函數(shù)@FILE是一個(gè)接口函數(shù),利用它可以從外部文本文件中讀出數(shù)據(jù),可以至于模型的任何位置。這樣就可以將集合域和數(shù)據(jù)域里的數(shù)據(jù)合并到文本文件里。該函數(shù)的語(yǔ)法格式為@file(’filename’)。這里filename是文件名,可以采用相對(duì)路徑和絕對(duì)路徑兩種表示方式。以第一章運(yùn)輸問(wèn)題的例子來(lái)講解@file函數(shù)的用法。例中有兩處涉及到數(shù)據(jù):第一個(gè)地方是集部分的6個(gè)warehouses集成員和8個(gè)vendors集成員;第二個(gè)地方是數(shù)據(jù)部分的capacity,demand和cost數(shù)據(jù)。為了使數(shù)據(jù)和我們的模型完全分開(kāi),我們把它們移到外部的文本文件中。修改模型代碼以便于用@file函數(shù)把數(shù)據(jù)從文本文件中拖到模型中來(lái)。修改后(修改處代碼紅色加粗)的模型代碼如下:102SETS:WAREHOUSES/@FILE('WIDGETS2.LDT')/:CAPACITY;VENDORS/@FILE('WIDGETS2.LDT')/:DEMAND;LINKS(WAREHOUSES,VENDORS):COST,VOLUME;ENDSETSMIN=@SUM(LINKS(I,J):COST(I,J)*VOLUME(I,J));@FOR(VENDORS(J):@SUM(WAREHOUSES(I):VOLUME(I,J))=DEMAND(J));@FOR(WAREHOUSES(I):@SUM(VENDORS(J):VOLUME(I,J))<=CAPACITY(I));DATA:CAPACITY=@FILE('WIDGETS2.LDT');DEMAND=@FILE('WIDGETS2.LDT');COST=@FILE('WIDGETS2.LDT');ENDDATA103模型的所有數(shù)據(jù)來(lái)自于WIDGETS2.LDT文件。其內(nèi)容如下:WH1WH2WH3WH4WH5WH6~!warehouses成員;V1V2V3V4V5V6V7V8~!vendors成員;605551434152~!產(chǎn)量;3537223241324338~!銷量;

62674259!單位運(yùn)輸費(fèi)用矩陣;4953858252197433767392712395726555228143把記錄結(jié)束標(biāo)記(~)之間的數(shù)據(jù)文件部分稱為記錄。如果數(shù)據(jù)文件中沒(méi)有記錄結(jié)束標(biāo)記,那么整個(gè)文件被看作單個(gè)記錄。注意到除了記錄結(jié)束標(biāo)記外,模型的文本和數(shù)據(jù)同它們直接放在模型里是一樣的。文本文件的注釋被忽略,在一個(gè)模型中最多可以調(diào)用16個(gè)文本數(shù)據(jù)文件1042.@text函數(shù)該函數(shù)被用在數(shù)據(jù)部分用來(lái)把解輸出至文本文件中。它可以輸出集成員和集屬性值。其語(yǔ)法為@text([’filename’])這里filename是文件名,可以采用相對(duì)路徑和絕對(duì)路徑兩種表示方式。如果忽略filename,那么數(shù)據(jù)就被輸出到標(biāo)準(zhǔn)輸出設(shè)備(大多數(shù)情形都是屏幕)。@text函數(shù)僅能出現(xiàn)在模型數(shù)據(jù)部分的一條語(yǔ)句的左邊,右邊是集名(用來(lái)輸出該集的所有成員名)或集屬性名(用來(lái)輸出該集屬性的值)。我們把用接口函數(shù)產(chǎn)生輸出的數(shù)據(jù)聲明稱為輸出操作。輸出操作僅當(dāng)求解器求解完模型后才執(zhí)行,執(zhí)行次序取決于其在模型中出現(xiàn)的先后。1052.@text函數(shù)--計(jì)算例子例1:@TEXT(‘RESULTS.TXT’)=X;將變量X的值(可能是向量)送入文件RESULTS.TXT例2:@TEXT()=START;在這個(gè)例子里,缺省了文件名,將使變量START的值出現(xiàn)在屏幕上1062.@text函數(shù)--計(jì)算例子SETS:DAYS/MONTUEWEDTHUFRISATSUN/:REQUIRED,START;ENDSETSDATA:REQUIRED=20161316191412;

@TEXT('OUT.TXT')=START;ENDDATAMIN=@SUM(DAYS(I):START(I));@FOR(DAYS(J):@SUM(DAYS(I)|I#LE#5:START(@WRAP(J-I+1,7)))>=REQUIRED(J));1073.@ranged(variable_or_row_name)@ranged函數(shù)輸出特指變量在目標(biāo)函數(shù)中系數(shù)的允許減少量或特指行右邊資源的允許減少量。例如,假設(shè)一個(gè)模型具有下面的數(shù)據(jù)域:DATA@TEXT(‘C:\OUTPUT.TXT’)=X,@RANDED(X);ENDDATA當(dāng)求解模型時(shí),變量X的值和它的目標(biāo)系數(shù)的允許減少量將寫入文件OUTPUT.TXT之中。借助輸出語(yǔ)句左邊的函數(shù),可以將輸出發(fā)送到一個(gè)文件、電子表格、數(shù)據(jù)庫(kù)和內(nèi)存區(qū)域。1084.@rangeu(variable_or_row_name)@rangeu函數(shù)輸出特指變量在目標(biāo)函數(shù)中系數(shù)的允許增加量或特指行右邊資源的允許增加量。例如,假設(shè)一個(gè)模型具有下面的數(shù)據(jù)域:DATA @TEXT(‘C:\OUTPUT.TXT’)=X,@RANDEU(X);ENDDATA當(dāng)求解模型時(shí),變量X的值和它的目標(biāo)系數(shù)的允許減少量將寫入文件OUTPUT.TXT之中。借助輸出語(yǔ)句左邊的函數(shù),可以將輸出發(fā)送到一個(gè)文件、電子表格、數(shù)據(jù)庫(kù)和內(nèi)存區(qū)域。1095.@statu

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論