问题描述
我解决了建模为二阶锥规划(SOCP)的最优潮流(OPF)问题。最初,我在AMPL语言中使用求解器CPLEX求解,花了0.08秒;然后我用CPLEX for Matlab(命令cplexqcp)解决了相同的问题,花了0.86s。显示的时间仅对应于求解器(CPLEX)的时间要求。有谁知道造成这种时差的原因吗?
CPLEX / AMPL的时间结果:
...
lpfnWndProc: Some( WndProc ),...
if hWnd.is_null() {
let title = win32_string("Error!");
let text = win32_string("Creating window is faield");
let ret = MessageBoxW(0 as HWND,text.as_ptr(),title.as_ptr(),MB_OK);
} else {
println!("successful");
ShowWindow(hWnd,SW_SHOWDEFAULT);
loop {
if !handle_message(0 as HWND,&mut Message) {
break;
}
}
}
CPLEX / MATLAB的时间结果:
Elapsed AMPL time : 0.430s
Elapsed Solve time : 0.080s
Elapsed cpu time: 0.510s
注意:问题有542个变量。
解决方法
很难说没有细节,但是我的第一个猜测是预处理。在将问题传递给求解器之前,AMPL会尝试将其简化,例如消除依赖于其他变量的变量。这可以大大缩短解决时间。
(对于大问题,这也可能对AMPL和求解器之间的数据I / O时间产生很大的影响,但对于仅542个变量而言,这可能不是一个大问题。)
另一种可能性是AMPL和Matlab使用不同的选项(例如,不同的解决方案公差)调用CPLEX。