用CPLEX / AMPL解决的SOCP问题比用CPLEX / MATLAB解决的问题快10倍,为什么?

问题描述

解决了建模为二阶锥规划(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。