LINGO使用說(shuō)明(比較簡(jiǎn)單)_第1頁(yè)
LINGO使用說(shuō)明(比較簡(jiǎn)單)_第2頁(yè)
LINGO使用說(shuō)明(比較簡(jiǎn)單)_第3頁(yè)
LINGO使用說(shuō)明(比較簡(jiǎn)單)_第4頁(yè)
LINGO使用說(shuō)明(比較簡(jiǎn)單)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(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)介

1、Lingo介紹Lingo是美國(guó)LINDO系統(tǒng)公司(LindoSymtemInc)開(kāi)發(fā)的求解數(shù)學(xué)規(guī)劃系列軟件中的一個(gè)(其他軟件為L(zhǎng)INGDO,GINO,WhatsBest等),它的主要功能是求解大型線性、非線性和整數(shù)規(guī)劃問(wèn)題,目前的版本是lingo11.0。lingo分為Demo、solvesuitehyper、industrial、extended等六類(lèi)不同版本,只有Demo版本是免費(fèi)的,其他版本需要向LINDO系統(tǒng)公司(在中國(guó)的代理商)購(gòu)買(mǎi),Lingo的不同版本對(duì)模型的變量總數(shù)、非線性變量個(gè)數(shù)、整型變量個(gè)數(shù)和約束條件的數(shù)量做出不同的限制(其中extended版本無(wú)限制)。Lingo的主要功能

2、特色為:( 1)既能求解線性規(guī)劃,也有較強(qiáng)的求解非線性規(guī)劃的能力;( 2)輸入模型簡(jiǎn)練直觀;( 3)運(yùn)行速度快、計(jì)算能力強(qiáng);( 4)內(nèi)置建模語(yǔ)言,提供幾十種內(nèi)部函數(shù),從而能以較少語(yǔ)句,較直觀的方式描述較大規(guī)模的優(yōu)化模型;( 5)將集合的概念引入編程語(yǔ)言,很容易將實(shí)際問(wèn)題轉(zhuǎn)換為L(zhǎng)ingo語(yǔ)言;( 6)能方便地與excek數(shù)據(jù)庫(kù)等其他軟件交換數(shù)據(jù)。學(xué)校圖書(shū)館40本lingo和excel在數(shù)學(xué)建模中的應(yīng)用,袁新生、邵大宏、郁時(shí)煉主編,科學(xué)出版社Lingo程序設(shè)計(jì)簡(jiǎn)要說(shuō)明在數(shù)學(xué)建模中會(huì)遇到如規(guī)劃類(lèi)的題型,在這種模型中總存在著一個(gè)目標(biāo),并希望這個(gè)目標(biāo)的取值盡可能的大或小,同時(shí)與這個(gè)目標(biāo)有關(guān)的一系列變量之

3、間存在一些約束。在構(gòu)造出目標(biāo)函數(shù)和約束條件的表達(dá)式后,我們需要對(duì)求出這個(gè)最值和各變量的取值。一般我們用LINGO來(lái)對(duì)模型進(jìn)行求解,本文將通過(guò)舉一個(gè)簡(jiǎn)單的例子,圍繞這個(gè)例子逐步學(xué)習(xí)LINGO的使用。LINGO只是一個(gè)求解工具,我們主要的任務(wù)還是模型的建立!當(dāng)你在windows下開(kāi)始運(yùn)行LINGO系統(tǒng)時(shí),會(huì)得到類(lèi)似下面的一個(gè)窗口:外層是主框架窗口,包含了所有菜單命令和工具條,其它所有的窗口將被包含在主窗口之下。在主窗口內(nèi)的標(biāo)題為L(zhǎng)INGOModel-LINGO1的窗口是LINGO的默認(rèn)模型窗口,建立的模型都都要在該窗口內(nèi)編碼實(shí)現(xiàn)。示例:求解線性規(guī)劃問(wèn)題:求解這個(gè)模型的相應(yīng)LINGO程序代碼如下:程

4、序一:max=x1+x2+x3+x4+x5+x6+x7+x8;x1+7*x2+4*x3+5*x4+5*x5+6*x6+9*x7+3*x8+4:二=15;2*x1+8*x2+5*x3+6*x4+7*x5+2*x6+5*x7+4*x8+9:二=38;3*x1+5*x2+6*x3+9*x4+5*x5+4*x6+4*x7+5*x8+8:二=27;4*x1+7*x2+2*x3+5*x4+8*x5+8*x6+7*x7+6*x8+4:二=44;5*x1+5*x2+4*x3+4*x4+4*x5+5*x6+x7+7*x8+6:二=15;6*x1+8*x2+8*x3+7*x4+5*x5+6*x6+2*x7+8*x

5、8+9:二=26;注:然后點(diǎn)擊工具條上的按鈕遒即可。本模型的最優(yōu)解為2.636364程序二:SETS:xb1/1.8/:x;xb2/1.6/:b,c;xb3(xb2,xb1):a;ENDSETSDATA:a=2856725435695445472588765544451768875628;b=153827441526;c=498469;ENDDATAMAX=sum(xb1(i):x(i);for(xb2(i):sum(xb1(j):a(i,j)*x(j)+c(i)<=b(i););注:然后點(diǎn)擊工具條上的按鈕即可。本模型的最優(yōu)解為2.636364注意:(1)在lingo中輸入的各種符號(hào)一定

6、要是英文狀態(tài)下輸入,不能是中文輸入狀態(tài)下的符號(hào)。例如正確輸入xb3(xb2,xb1):a;錯(cuò)誤/U入xb3(xb2,xb1):a;(2)Lingo中不區(qū)分字母大小寫(xiě).變量、常量定義在lingo中變量在使用前是無(wú)需定義也可以使用的。在描述類(lèi)似xi,aij帶有下標(biāo)的變量時(shí),我們可以在使用時(shí)一一例舉,即,x1,x2,x3-;x8,但這樣顯然很麻煩(剛接觸LINGO的時(shí)候大部分是這樣使用的)。Lingo中可以使用sets來(lái)預(yù)先定義這些變量,然后就可以在loop語(yǔ)旬方便地訪問(wèn)這一組變量,也可以用小x(2),a(2,3)的形式訪問(wèn)個(gè)別變量,這和C語(yǔ)言中的數(shù)組是類(lèi)似的。1 SETS的使用:為了定義xi,ai

7、j,那么首先要確定下標(biāo)i和j的取值范圍。在lingo中用sets來(lái)表示。代碼:SETS:Xb1/1.8/;Xb2/1.6/;ENDSETS其中xb1、xb2分別為下標(biāo)1.8,1.6的名字(sets_name,這些名字在loop語(yǔ)句中要使用。對(duì)于sets_nam一般將它命名為有意義的名稱,這個(gè)sets_nam瑟須以字母或下劃線(_)開(kāi)始。二維下標(biāo)是在兩個(gè)一維下標(biāo)定義的基礎(chǔ)上給定的,定義a(i,j)下標(biāo)的代碼如下:SETS:Xb1/1.8/;Xb2/1.6/;Xb3(xb2,xb1);ENDSETS(關(guān)于下標(biāo)的定義還有其他的方法,請(qǐng)參考LINGO的help文件,自行學(xué)習(xí))現(xiàn)在下標(biāo)已經(jīng)定義完成了,定

8、義數(shù)組變量時(shí)則需在下標(biāo)后加上冒號(hào)再寫(xiě)上變量名,代碼如下:SETS:Xb1/1.8/:x,c,b;Xb2/1.6/;Xb3(xb2,xb1):a;ENDSETS2 DATA的使用(常量定義):在lingo中把常量理解為已經(jīng)被給定某常數(shù)的變量,在DATA中對(duì)一些變量賦值,使之成為常量。代碼如下:SETS:xb1/1.8/:x;xb2/1.6/:b,c;xb3(xb2,xb1):a;ENDSETSDATA:a=174556932856725435695445472588765544451768875628;b=153827441526;c=498469;ENDDATA請(qǐng)嘗試著在lingo中輸入以上代

9、碼后點(diǎn)擊solve按鈕,查看執(zhí)行結(jié)果。這些變量的值在規(guī)劃求解中始終不變,也即為常量。3變量類(lèi)型:Lingo中變量被默認(rèn)為大于等于0的浮點(diǎn)型變量,在解決某些問(wèn)題對(duì)變量有特殊的要求,需要重新定義其變量類(lèi)型。下面介紹幾個(gè)常用的:變量不受大于等于的限制,即也可以取到負(fù)值:用Free(x);語(yǔ)句。變量為整型:用Gin(x);語(yǔ)句。變量為二進(jìn)制數(shù),即取值非0即1:用Bin(x);語(yǔ)句。其中x是要改變類(lèi)型的變量。更多請(qǐng)見(jiàn)lingo的help文件。Loop語(yǔ)句Lingo提供的FOR、SUM、MAX、MIN語(yǔ)句會(huì)使我們更輕松地表達(dá)多種約束表達(dá)式,同時(shí)也避免了大量的輸入工作。1 .for語(yǔ)句:a)假定我們要定義x

10、i為整型變量,一般我們需要寫(xiě)下如下代碼:GIN(X(1)GIN(X(2)GIN(X(3)GIN(X(4)GIN(X(5)GIN(X(6)GIN(X(7)GIN(X(8)顯然這太麻煩了。使用for語(yǔ)句for(xb1(i):GIN(x(i);就可以替代上面的輸入工作。其中xb1在上述代碼中已經(jīng)定義過(guò),變量i是索引變量。FOR語(yǔ)句格式:FOR(SETS_NAME(索引變量):循環(huán)部分表達(dá)式)for(xb1(i):GIN(x(i);下面我們用C語(yǔ)言來(lái)幫助理解,以便我們更好地理解。For(i=1;i<=8;i+)gin(x(i);for語(yǔ)句中冒號(hào)前面的部分xb1(i)說(shuō)明索引變量i將從1遞增到到8

11、;冒號(hào)后面是循環(huán)的內(nèi)容,可以是一個(gè)語(yǔ)句,也可以是多個(gè)語(yǔ)句用分號(hào)隔開(kāi)。b)上面介紹的是一維的循環(huán),二維循環(huán)也與之類(lèi)似,例如:for(xb3(i,j):gin(a(i,j);用C語(yǔ)言解釋為:For(i=;i<=8;i+)For(j=1;j<=6;j+)gin(a(i,j);2.SUM語(yǔ)句:在約束條件表達(dá)式中經(jīng)常用到三,lingo提供的SUM語(yǔ)句能方便地表達(dá),但必須要以SETS為基礎(chǔ)。SUM語(yǔ)句格式和FOR語(yǔ)句類(lèi)似:SUM(SETS_NAME(索引變量):被累加部分表達(dá)式)其中累加部分表達(dá)式只能是一條語(yǔ)句。SUM語(yǔ)句不可以像FOR語(yǔ)句那樣作為單獨(dú)的一句話出現(xiàn),一般將它和另一個(gè)常量或表達(dá)式

12、比較大小,例:SUM(SETS_NAME(索引變量):被累加部分表達(dá)式)<=常量(表達(dá)式);有時(shí)為了程序看王去更簡(jiǎn)潔,可以這樣寫(xiě):VName=SUM(SETS_NAME(索引變量):被累加部分表達(dá)式);VName<=常量(表達(dá)式);這樣VName將代表整個(gè)三表達(dá)式,這樣將有可能會(huì)影響程序運(yùn)行速度,一般這樣的影響忽略不計(jì)。同樣sum語(yǔ)句也可以用于多維變量。3 .MAX語(yǔ)句:Max語(yǔ)句的功能是從一組取值與下標(biāo)有關(guān)的表達(dá)式中返回它們的最大值,格式如下:MAX(SETS_NAME(索引變量):表達(dá)式)例:為表達(dá)max(bi*ci)>=33,i=1.8其中的一組取值是b1*c1,b2*

13、c2,b3*c3.,再?gòu)闹刑暨x出最大值作為MAX語(yǔ)句的值。相應(yīng)Lingo代碼如下:max(xb1(i):b(i)*c(i)<=33;同樣MAX語(yǔ)句也可以用于多維變量。4 .MIN語(yǔ)句:MIN語(yǔ)句的功能是從一組取值與下標(biāo)有關(guān)的表達(dá)式中返回它們的最小值。用法與MAX的相同。EXCEL電子表格接口在你解決一個(gè)模型的時(shí)候,或許會(huì)有大量的數(shù)據(jù)要整合到你的代碼中去,而這些數(shù)據(jù)大部分時(shí)候會(huì)被保存在電子表格中。而且EXCEL也是用來(lái)處理你所得到的數(shù)據(jù)較好的一個(gè)選擇。出于上述原因,LINGO提供了一些命令方便你將數(shù)據(jù)直接從電子表格中導(dǎo)入到模型中。在這里我將只介紹一個(gè)與EXCLE鏈接的命令一一OLE。1.導(dǎo)

14、入數(shù)據(jù):我們先看一個(gè)例程:SETS:xb1/1.8/:x;xb2/1.6/:c,b;xb3(xb2,xb1):a;ENDSETSDATA:a,b,c=OLE(E:DATA,DA,DB,DC);ENDDATAMAX=sum(xb1(i):x(i);for(xb2(i):sum(xb1(j):a(i,j)*x(j)+c(i)<=b(i););同時(shí)我們?cè)贓盤(pán)新建了一個(gè)名為DATA.XLS的EXCLE文件;關(guān)于EXCLE的使用,這里不更多說(shuō)明。需要指出的是DA,DB,DC是EXCLE中對(duì)一系列單元格的命名,即先選中某個(gè)一維或多維單元格區(qū)域,然后再在顯示單元格行列坐標(biāo)的文本框中寫(xiě)入對(duì)這個(gè)區(qū)域的命名

15、,再回車(chē)確認(rèn)。這樣就可以通過(guò)這個(gè)命名來(lái)控制訪問(wèn)EXCLE的數(shù)據(jù)了。至于另一種操作方法請(qǐng)查找相關(guān)的help文件。以上只是介紹了LINGO基本的知識(shí),上面的程序未經(jīng)調(diào)試,可能存在一些問(wèn)題!還有希望大家能盡可能使用help文件,在其中有著詳細(xì)的解答!四LINGO函數(shù)LINGO有9種類(lèi)型的函數(shù):1 1基本運(yùn)算符:包括算術(shù)運(yùn)算符、邏輯運(yùn)算符和關(guān)系運(yùn)算符2 2數(shù)學(xué)函數(shù):三角函數(shù)和常規(guī)的數(shù)學(xué)函數(shù)3 3金融函數(shù):LINGO提供的兩種金融函數(shù)4 4概率函數(shù):LINGO提供了大量概率相關(guān)的函數(shù)5 5變量界定函數(shù):這類(lèi)函數(shù)用來(lái)定義變量的取值范圍6 6集操作函數(shù):這類(lèi)函數(shù)為對(duì)集的操作提供幫助7 7集循環(huán)函數(shù):遍歷集的

16、元素,執(zhí)行一定的操作的函數(shù)8 8數(shù)據(jù)輸入輸出函數(shù):這類(lèi)函數(shù)允許模型和外部數(shù)據(jù)源相聯(lián)系,進(jìn)行數(shù)據(jù)的輸入輸出9 9輔助函數(shù):各種雜類(lèi)函數(shù)4.1 基本運(yùn)算符這些運(yùn)算符是非?;镜模踔量梢圆徽J(rèn)為它們是一類(lèi)函數(shù)。事實(shí)上,在LINGO中它們是非常重要的。4.1.1 算術(shù)運(yùn)算符算術(shù)運(yùn)算符是針對(duì)數(shù)值進(jìn)行操作的。LINGO提供了5種二元運(yùn)算符:人乘方*乘/除十加一減LINGO唯一的一元算術(shù)運(yùn)算符是取反函數(shù)這些運(yùn)算符的優(yōu)先級(jí)由高到底為:高-(取反)人*/低H運(yùn)算符的運(yùn)算次序?yàn)閺淖蟮接野磧?yōu)先級(jí)高低來(lái)執(zhí)行。運(yùn)算的次序可以用圓括號(hào)“()”來(lái)改變。例4.1算術(shù)運(yùn)算符示例。25/3,(2+4)/5等等。4.1.2 邏輯運(yùn)

17、算符在LINGO中,邏輯運(yùn)算符主要用于集循環(huán)函數(shù)的條件表達(dá)式中,來(lái)控制在函數(shù)中哪些集成員被包含,哪些被排斥。在創(chuàng)建稀疏集時(shí)用在成員資格過(guò)濾器中。LINGO具有9種邏輯運(yùn)算符:#not#否定該操作數(shù)的邏輯值,nnot#是一個(gè)一元運(yùn)算符# eq#若兩個(gè)運(yùn)算數(shù)相等,則為true;否則為flase# ne#若兩個(gè)運(yùn)算符不相等,則為true;否則為flase# gt#若左邊的運(yùn)算符嚴(yán)格大于右邊的運(yùn)算符,則為true;否則為flase# ge#若左邊的運(yùn)算符大于或等于右邊的運(yùn)算符,則為true;否則為flase# lt#若左邊的運(yùn)算符嚴(yán)格小于右邊的運(yùn)算符,則為true;否則為flase# le#若左邊的運(yùn)

18、算符小于或等于右邊的運(yùn)算符,則為true;否則為flase# and#僅當(dāng)兩個(gè)參數(shù)都為true時(shí),結(jié)果為true;否則為flase# or#僅當(dāng)兩個(gè)參數(shù)都為false時(shí),結(jié)果為false;否則為true這些運(yùn)算符的優(yōu)先級(jí)由高到低為:高#not#eq#ne#gt#ge#lt#le#低#and#or#例4.2邏輯運(yùn)算符示例2 #gt#3#and#4#gt#2,其結(jié)果為假(0)。3 .1.3關(guān)系運(yùn)算符在LINGO中,關(guān)系運(yùn)算符主要是被用在模型中,來(lái)指定一個(gè)表達(dá)式的左邊是否等于、小于等于、或者大于等于右邊,形成模型的一個(gè)約束條件。關(guān)系運(yùn)算符與邏輯運(yùn)算符#eq#、#le#、#ge#B然不同,前者是模型中

19、該關(guān)系運(yùn)算符所指定關(guān)系的為真描述,而后者僅僅判斷一個(gè)該關(guān)系是否被滿足:滿足為真,不滿足為假。LINGO有三種關(guān)系運(yùn)算符:“=、”“<=和”“>=?!盠INGO中還能用“<”表示小于等于關(guān)系,“>”表示大于等于關(guān)系。LINGO并不支持嚴(yán)格小于和嚴(yán)格大于關(guān)系運(yùn)算符。然而,如果需要嚴(yán)格小于和嚴(yán)格大于關(guān)系,比如讓A嚴(yán)格小于B:A<B,那么可以把它變成如下的小于等于表達(dá)式:A+e<=B,這里e是一個(gè)小的正數(shù),它的值依賴于模型中A小于B多少才算不等。下面給出以上三類(lèi)操作符的優(yōu)先級(jí):高#not#-(取反)#eq#ne#gt#ge#lt#le#and#or#低<=&g

20、t;=4.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;否則,返回1floor(x)返回x的整數(shù)部分。當(dāng)x>=0時(shí),返回不超過(guò)x的最大整數(shù);當(dāng)x<0時(shí),返回不低于x的最大整數(shù)max(x1,x2,,xn)返回x1,x2,,xn中的最大值min(x1,x2,xn)返回x1,x2,,xn中的最小值4.3 金融函數(shù)目前LINGO提供

21、了兩個(gè)金融函數(shù)。1. fpa(I,n)返回如下情形的凈現(xiàn)值:?jiǎn)挝粫r(shí)段利率為I,連續(xù)n個(gè)時(shí)段支付,每個(gè)時(shí)段支付單位費(fèi)用。若每個(gè)時(shí)段支付x單位的費(fèi)用,則凈現(xiàn)值可用x乘以fpa(I,n)算得。fpa的計(jì)算公式為凈現(xiàn)值就是在一定時(shí)期內(nèi)為了獲得一定收益在該時(shí)期初所支付的實(shí)際費(fèi)用。2. fpl(I,n)返回如下情形的凈現(xiàn)值:?jiǎn)挝粫r(shí)段利率為I,第n個(gè)時(shí)段支付單位費(fèi)用。fpl(I,n)的計(jì)算公式為(1+I)”0細(xì)心的讀者可以發(fā)現(xiàn)這兩個(gè)函數(shù)間的關(guān)系:4.4 概率函數(shù)1. pbn(p,n,x)二項(xiàng)分布的累積分布函數(shù)。當(dāng)n和(或)x不是整數(shù)時(shí),用線性插值法進(jìn)行計(jì)算。2. pcx(n,x)自由度為n的x2分布的累積分

22、布函數(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ì)算。7. phg(pop,g,n,x)超幾何(Hypergeometric)分布的累積分布函數(shù)。pop表示產(chǎn)

23、品總數(shù),g是正品數(shù)。從所有產(chǎn)品中任意取出n(nwpop件。pop,g,n和x都可以是非整數(shù),這時(shí)采用線性插值進(jìn)行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ù)。13. qrand(seed

24、)產(chǎn)生服從(0,1)區(qū)間的擬隨機(jī)數(shù)。qrand只允許在模型的數(shù)據(jù)部分使用,它將用擬隨機(jī)數(shù)填滿集屬性。通常,聲明一個(gè)mKn的二維表,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)生的。14. rand(seed)返回0和1間的偽隨機(jī)數(shù),依賴于指定的種子。典型用法是U(I+1)=rand(U(I)。注意如果seed不變,那么產(chǎn)生的隨機(jī)數(shù)也不變。4.5 變量界定函數(shù)bin(x) bnd(L,x,U) free(x) gin(x) 在默認(rèn)情況下,了默認(rèn)的下界為 0 以取消默認(rèn)下界為變量界定函數(shù)實(shí)現(xiàn)對(duì)變量

25、取值范圍的附加限制,共4種:限制x為0或1限制L<x<U取消對(duì)變量x的默認(rèn)下界為0的限制,即x可以取任意實(shí)數(shù)限制x為整數(shù)LINGO規(guī)定變量是非負(fù)的,也就是說(shuō)下界為0,上界為+8。free取消bnd用于設(shè)定一個(gè)變量的上下界,它也可0的約束。4.6 集操作函數(shù)LINGO提供了幾個(gè)函數(shù)幫助處理集。)1 in(set_name,primitive_index_1,primitive_index_2,如果元素在指定集中,返回1;否則返回0。2 index(set_name,primitive_set_element)該函數(shù)返回在集set_name中原始集成員primitive_set_ele

26、ment的索弓I。如果set_name被忽略,那么LINGO將返回與primitive_set_element匹配的第一個(gè)原始集成員的索引。如果找不到,則產(chǎn)生一個(gè)錯(cuò)誤。3 wrap(index,limit)該函數(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ì)劃編制中特別有用。4 size(set_name)該函數(shù)返回集set_name的成員個(gè)數(shù)。在模型中明確給出集大小時(shí)最好使用該函數(shù)。它的使用使模型更加數(shù)據(jù)中立,集大小改變時(shí)也更易維護(hù)。4.7 集循環(huán)函數(shù)集循環(huán)函數(shù)遍歷整個(gè)集進(jìn)行操作。

27、其語(yǔ)法為function(setname(set_index_list)|conditional_qualifier:expression_list);function相應(yīng)于下面羅列的四個(gè)集循環(huán)函數(shù)之一;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)。expression_list是被應(yīng)用到每個(gè)集成員的表達(dá)式列表,當(dāng)用的是for

28、函數(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中引用的所有屬性的類(lèi)型都是setname集。1 for該函數(shù)用來(lái)產(chǎn)生對(duì)集成員的約束。基于建模語(yǔ)言的標(biāo)量需要顯式輸入每個(gè)約束,不過(guò)for函數(shù)允許只輸入一個(gè)約束,然后LINGO自動(dòng)產(chǎn)生每個(gè)集成員的約束。2 sum該函數(shù)返回遍歷指定的集成員的一個(gè)表達(dá)式的和。3 min和max返回指定的集成員的一個(gè)表達(dá)式的最小值或最大值。4.8 輸入和輸出函數(shù)輸

29、入和輸出函數(shù)可以把模型和外部數(shù)據(jù)比如文本文件、數(shù)據(jù)庫(kù)和電子表格等連接起來(lái)。1 file函數(shù)該函數(shù)用從外部文件中輸入數(shù)據(jù),可以放在模型中任何地方。該函數(shù)的語(yǔ)法格式為file('filename這里filename是文件名,可以采用相對(duì)路徑和絕對(duì)路徑兩種表示方式。file函數(shù)對(duì)同一文件的兩種表示方式的處理和對(duì)兩個(gè)不同的文件處理是一樣的,這一點(diǎn)必須注意。2 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)的先后。3 ole函數(shù)OLE是從EXCEL中引入或輸出數(shù)據(jù)的接口函數(shù),它是基于傳輸?shù)腛LE技術(shù)。OLE傳輸直接在內(nèi)存中傳輸數(shù)據(jù),并不借助于中間文件。當(dāng)使用OLE時(shí),LINGO先裝載EXCEL,再通知EXCEL裝載指定的電子數(shù)據(jù)表,最后從電子數(shù)據(jù)表中獲得Ranges為了使用OLE函數(shù),必須有EXC

溫馨提示

  • 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)論