2014-10-08 10 views
0

Я пишу линейное программирование с помощью VBA и решаю его с помощью решателя CPLEX. Я могу подключить эти шаги вручную, написав файл LP по VBA, разрешив в 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, но почему бы просто не использовать API CPLEX .Net, доступный из VB?

Существует множество примеров (например, в 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 напрямую (т. Е. Дважды щелкаю по нему), он все равно работает хорошо. Вы знаете, как его решить. –

+0

Возможно, попробуйте использовать полный путь к файлу - возможно, CPLEX по умолчанию использует собственную локальную папку, где хранится cplex.exe? – TimChippingtonDerrick

Смежные вопросы