Я пишу линейное программирование с помощью 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). Может ли кто-нибудь помочь мне разобраться в этой проблеме? Любые идеи очень ценятся, даже предлагают мне использовать другой язык.
Да, это похоже на хорошее решение. Небольшая проблема заключается в том, что мне нужно преобразовать весь мой код в VBA в VB. Я нашел другое решение, которое использует модуль SendInput (http://vb.mvps.org/samples/SendInput/). Я могу вызвать CPLEX и передать команду в него, но CPLEX не может распознать файлы данных, расположенные в одной папке (например, читать lp-файл, но другие команды, такие как отображение, справка и т. Д. Работают нормально). Однако, когда я запускаю CPLEX.exe напрямую (т. Е. Дважды щелкаю по нему), он все равно работает хорошо. Вы знаете, как его решить. –
Возможно, попробуйте использовать полный путь к файлу - возможно, CPLEX по умолчанию использует собственную локальную папку, где хранится cplex.exe? – TimChippingtonDerrick