Синтаксис для обратных вызовов Mosel PREINTSOL? - PullRequest
0 голосов
/ 09 ноября 2018

Я новичок в Xpress Mosel после долгого времени работы с CPLEX. Я хочу решить проблему маршрутизации транспортных средств с помощью обратных вызовов в Mosel и Xpress.

model VRPSPD
uses "mmxprs", "mmsystem", "mmsheet"   
forward procedure break_subtours(isheur:boolean,cutoff:real) 
!implementation VRP except subtours
setcallback(XPRS_CB_PREINTSOL, "break_subtours(false,0.01)") 
minimize(obj)
procedure break_subtours(isheur:boolean,cutoff:real)
!subtour separation
!insert cuts
end-procedure 

Пока что я получаю сообщение об ошибке: "Неправильный тип процедуры для обратного вызова PREINTSOL" (но https://www.fico.com/fico-xpress-optimization/docs/latest/mosel/mosel_lang/dhtml/setcallback.html указывает использовать именно это) Я обнаружил, что есть что-то вроде cbsetcutoff, но пока не знаю, как его использовать.

Я не нашел ни одного примера кода для использования PREINTSOL. Можете ли вы указать мне пример реализации, которую я могу использовать?

СПАСИБО:)

1 Ответ

0 голосов
/ 21 ноября 2018

Подпрограммы, используемые в обратных вызовах, должны быть 'public', поэтому в вашем примере:

пересылать открытую процедуру break_subtours (isheur: логическое, cutoff: реальное)

...

публичная процедура break_subtours (isheur: логическое, cutoff: real)

Вы можете найти несколько примеров Mosel, реализующих обратные вызовы для генерации разреза, здесь:

База данных примеров Xpress - Мозель - Методы решения (https://examples.xpress.fico.com/example.pl#mosel_solv)

...