2014-10-08 28 views
0

我正在使用VBA編寫線性編程解決方案並通過CPLEX求解器解決此問題。我可以通過VBA編寫LP文件手動連接這些步驟,在CPLEX中解決問題,寫出解決方案並通過另一個VBA子例程讀取該解決方案以進行進一步處理。但是,我的新研究需要多次重複這些步驟,這些步驟是編寫LP文件,由CPLEX解決,通過VBA編寫解決方案,處理解決方案以釋放新的LP文件,然後由CPLEX解決等。 3命令我需要CPLEX每個時代它被稱爲輸入是:將CPLEX求解器集成到VBA中

Read (name).lp 
Optimize 
write (name).sol 

我已經試過殼功能:

Dim wsh As Object 
Set wsh = VBA.CreateObject("WScript.Shell") 
Dim waitOnReturn As Boolean: waitOnReturn = True 
Dim windowStyle As Integer: windowStyle = 1 
wsh.Run "C:\cplex.exe /S /K read 1.lp", windowStyle, waitOnReturn 

這個代碼可以調用CPLEX但不能執行命令(但是,適用於其他可執行文件(如cmd.exe))。任何人都可以幫我解決這個問題嗎?任何想法都非常感謝,甚至建議我使用另一種語言。

回答

0

我不確定您是否可以從VBA使用它,但爲什麼不使用可從VB訪問的CPLEX .Net API?

有很多示例(例如,在C:\ Program Files \ IBM \ ILOG \ CPLEX_Studio1251 \ cplex \ examples \ src \ vb中)顯示瞭如何使用該API。

+0

是的,這似乎是一個很好的解決方案。一個小問題是我需要將我在VBA中的所有代碼轉換爲VB。 我發現了另一個解決方案,它使用SendInput模塊(http://vb.mvps.org/samples/SendInput/)。我可以調用CPLEX並將命令傳遞給它,但CPLEX無法識別位於同一文件夾中的任何數據文件(例如,讀取lp文件,但顯示,幫助等其他命令正常工作)。但是,當我直接運行CPLEX.exe(即雙擊它)時,它仍然運行良好。你知道如何解決它。 – 2014-10-09 04:49:55

+0

也許嘗試使用文件的完整路徑 - 可能是CPLEX默認存儲cplex.exe所在的本地文件夾? – TimChippingtonDerrick 2014-10-10 05:52:30