Используете OPL CPLEX в Excel VBA?

Я хотел бы позвонить в OPL CPLEX и решить проблемы в программе, написанной на Excel VBA. Я хочу создать модель OPL и загрузить в нее файлы .mod и .dat. После долгого поиска в Интернете я нашел несколько строк сценария, размещенного на веб-сайте IBM.

Sub CPLEXCallHere()

'To create the Concert environment
Dim oplF As Oplfactory

'To create the error handler
Dim errorHandler As OplErrorHandler

'To identify the model source
Dim modelSource As OplModelSource

'To identify the model definition
Dim def As OplModelDefinition

'To create the engine instance
Dim cp As cp

'To create the OPL model
Dim opl As OplModel

'Specifying a data source
Dim dataSource As OplDataSource

oplF = New Oplfactory   'concert environment
errorHandler = oplF.CreateOplErrorHandler() 'error handler

modelSource = oplF.CreateOplModelSource(DATADIR + "/SA_MP_R1.mod") 'model source
def = oplF.CreateOplModelDefinition(modelSource, settings) 'model definition
cp = oplF.CreateCP()    'engine instance

opl = oplF.CreateOplModel(def, CPLEX) 'OPL model

dataSource = oplF.CreateOplDataSource(DATADIR + "/1 SA_MP_R1_1.dat")     'specifying data source
opl.AddDataSource (dataSource)

'Generating the Concert model
opl.Generate

'Solving the model
If (CPLEX.Solve()) Then

End If

'Accessing the solution through OPL
 opl.PrintSolution (Console.Out)
End Sub

Однако, чтобы использовать приведенный выше сценарий, должна быть функция, которая должна быть объявлена ​​библиотекой OPL или файлом oplall.dll следующим образом:

Public Declare Function AccessCPLEX Lib "C:\ILOG\CPLEX_Studio1261\opl\lib\oplall.dll" Alias "oplall" [([arglist])] [As type]

У меня недостаточно опыта для такой функции объявления, поэтому я очень запутался. Каким будет тип функции (приложение, объект, длинная строка, строка и т. Д.)? Как я могу ввести в VBA типы переменных, включая Oplfactory, OplModelSource, OplModelDefinition и т. Д.?

Любая помощь будет очень признательна.

Спасибо,


person Yusuf    schedule 15.02.2016    source источник


Ответы (1)


вы можете взглянуть на

https://github.com/AlexFleischerParis/howtowithopl/blob/master/oil.mod

Там вы найдете пример того, как просто вызвать oplrun из VBA.

Ключевой частью является вызов внешнего exe-файла oplrun.exe

Private Sub Button1CallOPL_Click()
MsgBox "External call to OPL"

Dim strPath As String
strPath = "C:\ILOG\CPLEX_Studio127\opl\bin\x64_win64\oplrun.exe C:\poc\callOPLfromExcel\oil.mod C:\poc\callOPLfromExcel\excelbuttonoilSheet.dat"

Shell strPath

Конец подписки

С уважением

person Alex Fleischer    schedule 22.02.2016
comment
Алекс Флейшер: этот код у меня работает, но если я изменю расположение мода и / или файла dat, он сломается. Есть идеи, почему? - person tjnel; 19.06.2020