在与CPLEX合作一段时间后,我才刚接触Xpress Mosel。我想用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的代码示例。您能指出我可以使用的示例实现吗?
谢谢:)
答案 0 :(得分:2)
回调中使用的子例程必须是“公共”的,因此在您的示例中:
转发公共过程break_subtours(isheur:boolean,cutoff:real)
...
公共过程break_subtours(isheur:boolean,cutoff:real)
您可以在此处找到几个实现剪切生成的回调的Mosel示例:
Xpress Examples Database - Mosel - Solving techniques(https://examples.xpress.fico.com/example.pl#mosel_solv)