LINDO

LINDO

LINDO(Linear, INteractive, and Discrete Optimizer)是一個解決二次線性整數規劃問題的方便而強大的工具。這些問題主要出現在商業、工業、研究和政府等領域。

簡介,使用領域,使用模式,輸入一個模型,要素,約束條件,錯誤報告,解決方案,最新版本,

簡介

什麼是LINDO
在這裡有必要先讓大家知道什麼是運籌學。運籌學是近四十年來發展起來的一門新興學科。它的目的是為行政管理人員在作決策時提供科學的依據。因此,它是實現管理現代化的有力工具。運籌學在生產管理、工程技術、軍事作戰、科學試驗、財政經濟以及社會科學中都得到了極為廣泛的套用。講到這裡,你已經被運籌學深深吸引了吧,至於你會怎么去學不是我們討論的問題,在這裡我們只說學運籌學要用到的工具。套用運籌學去處理問題有兩個重要特徵:一是從全局的觀點出發;二是通過建立模型如數學模型或模擬模型,對於要求解的問題得到最合理的決策。好了,說到這裡,LINDO該出場了,它的作用就是負責把問題的最優決策求出來,省去大量難以想像的人工計算。如果你是運籌學的學習者,你就必須擁有LINDO。
LINDOLINDO

使用領域

已被證實LINDO能在商業、工業、研究和政府等領域發揮巨大作用的具體事務包括:產品分銷、成分混合、生產與個人事務安排、存貨管理……在這裡不一一列舉,但可以肯定的是,LINDO可以大展拳腳的領域是多不勝數的。LINDO的主要設計原則是,如果一個用戶只是想解決一個簡單的問題,就不應該在學習LINDO的基本特性上花費太多的準備成本。例如,某個用戶想解決以下這樣一個問題:(看懂這個問題需要一定的運籌學知識,下面是一個實際問題的數學模型)
Maximize 2X + 3Y
Subject to
4X + 3Y < 10
3X + 5Y < 12
那么,用戶就只需要打開LINDO,然後直接輸入以上內容即可。而另一方面,LINDO也可以用來解決一些複雜的二次線性整數規劃方面的實際問題。如在大型的機器上,LINDO被用來解決一些擁有超過50,000個約束條件和200,000萬個變數的大規模複雜問題。

使用模式

LINDO主要有三個基本使用模式。對於一些中小規模的問題,LINDO只要通過鍵盤輸入就可以方便地實現互動性良好的操作與使用,如輸入一個模型是相當簡單方便的事情。另外,LINDO也可以對外建檔案進行處理,只要這些檔案里包含有必要的命令代碼和輸入數據,處理後就可以生成用於報告目的的文檔。最後,你還可以自建子程式,然後直接與LINDO相結合形成一個包括你自己的代碼和LINDO本身的最佳化庫的綜合程式。

輸入一個模型

現在讓我們用例子來說明怎樣輸入和求解一個模型。當我們打開LINDO後,螢幕將出現以下視窗:
在外面標題為"LINDO"的是主視窗,它包含所有的其他視窗以及所有命令選單和工具列。在裡面的是一個新的空白的模型視窗,等下我們就會在那裡直接輸入一個簡單的範例模型,但在此之前,我們首先需要簡明地了解一下一個LINDO模型所必須具備的基本條件和要素。

要素

一個LINDO模型至少需要具備三個要素:目標、決策變數和約束條件。
第一個基本要素是目標,顧名思義,是指一個問題解決後所要達到的目標。有兩種目標可選擇:MAX或MIN,也就是最大化或最小化。在一個典型的經濟問題里,你可能想使你的獲利最大化或成本最小化。因此,LINDO模型里的第一個字必須是MAX或是MIN。然後,在其後輸入的一個式子就叫做目標函式。現在假設要使利益最大化,就需要輸入:MAX 10X + 15Y,然後回車。
那么,X和Y又是什麼呢?他們是第二個要素:模型里的決策變數,LINDO就是通過調整這些變數的值,使你的利益達到最大化。它們可以表示兩種產品的銷售量,或者兩個不同公司的銷售量。在這裡每單位X(產品)的毛利是10,Y的是15。他們是變數,在LINDO里,從開始使用他們的時候起,他們就存在。目標和變數就講這么多。

約束條件

現在讓我們來看一下約束條件。在某種意義上,約束條件是我們所建立的模型中最重要的部分,它們需要認真地考慮。
在前面的例子裡,我們打算使式子10X + 15Y的值最大,但對X和Y能賣出多少卻沒有加以限制,這當然不可能,因為在現實世界裡會存在諸如勞動產出和有效性等限制因素。所以我們會把X和Y的值限制在一個合理的範圍之內而不是任其隨意地取值。於是我們需要在模型的另外一行里輸入"SUBJECT TO"字樣(或者可以只輸入ST),跟著在後面分行輸入X < 10 和 Y < 12。有一點值得注意的是,LINDO會將"<"符號理解為小於或等於而不是絕對的小於。如果你喜歡的話,你可以用"<="來代替"<"。
很好,我們已經對X和Y加以限制了。再假設我們只有有限的勞動力,如16單位的勞動力,產品X需要一個單位而Y需要兩個單位。現在我們繼續加上一條約束條件:X + 2 Y < 16。最後,我們在另一行加上END字樣以表明約束條件的結束。這時,建立後的模型應該就是下面這個樣子:
這樣我們就建立了一個簡單的模型,下面我們可以開始求解了。從Solve選單選擇Solve命令,或者在視窗頂部的工具列里按Solve按鈕,LINDO就會開始對模型進行編譯。首先,LINDO會檢查模型是否具有數學意義以及是否符合語法要求。如果模型不能通過這一步檢查,會看到以下報錯信息:An error occurred during compilation on line: n(產生錯誤的行數),LINDO會自動跳轉到發生錯誤的行。我們就可以檢查該行的語法錯誤並改正過來。
通過這一檢查階段後,LINDO就會正式開始求解,這由一個叫LINDO solver的處理器完成。當solver初始化時,會在螢幕上顯示一個狀態視窗,如下圖所示:  這個狀態視窗可以顯示solver的進度,下表是對各項數據/控制按鈕的說明:
數據項/控制
說明
Status
給出當前解決方案的狀態,可能的值包括:Optimal(最優的), Feasible(可行的), Infeasible(不可行的),Unbounded(未定的)
Iterations
solver的重複次數
Infeasibility
多餘或錯誤約束條件數量
Objective
目標函式的當前值
Best IP
標示得到最優整數解決方案值,該項只出現在IP(整數規劃)模型。
IP Bound
IP模型中目標的理論範圍
Branches
由LINDO IP solver分生出來的整型變數個數
Elapsed Time
solver啟動後所經過時間
Update Interval
狀態視窗更新周期(秒)。你可以把這個值設成任何一個非負數,如果把它設成零的話很可能會增加求解時間。
Interrupt Solver
按下該按鈕,solver將立刻停止並返回當前得到的最優解。
Close
按下該按鈕關閉狀態視窗,solver繼續運行。狀態視窗可以通過選取相應命令重新打開。
當solver完成最佳化過程後將會提示你是否要進行靈敏度和範圍分析(都是運籌學裡面的術語)。隨著運籌學學習的深入,以後我們會用到這個有用的信息的,但現在我們先按下"No"按鈕關閉狀態視窗。

錯誤報告

現在,螢幕將會出現一個名為"Reports Window"的視窗。這個視窗里顯示的就是LINDO的輸出結果報告,它可以顯示64,000個字元的信息。如果有需要,LINDO會從頂部開始刷除部分輸出以騰出空間來顯示新的輸出。如果你有一個很長的解決方案報告,需要完整地進行閱讀使用,你可以把這些信息從Reports Window寫到另外一個磁碟檔案里,方法是選取File|Log Output命令,快捷鍵是F10,然後你就可以找到該檔案進行閱讀使用。

解決方案

還是回到我們的例子,Reports Window里顯示的是模型的最優解決方案,如下所示:
按照順序,報告首先告訴我們LINDO進行了兩次運算後求出該解;跟著是在約束條件的約束下我們可以得到的最大利潤是145;這時X和Y分別取值10和3。值得注意的是,利潤似乎更高的產品Y在這裡居然用得比較少,這是因為我們前面所假設的勞動力供給的限制在起作用,在這裡就很好地證明了運籌學的強大作用,使我們不至於因為一些表面現象而作出錯誤的決策。

最新版本

lindo當前最新版本為8.0 beta。

相關詞條

熱門詞條

聯絡我們