2
我正在使用CPLEX解決MIP問題。解決之後,我想要降低成本。我意識到降低成本不爲MIP存在的事實,所以我做了以下內容:CPLEX獲得MIP的降低成本?
int type = CPXgetprobtype(env, lp);
if(CPXchgprobtype(env, lp, CPXPROB_FIXEDMILP)) abort();
if(CPXlpopt(env,lp)) abort();
int blabla; double blublu;
if(CPXsolution (env, lp, &blabla , &blublu , x, pi, slack, dj)) abort();
for (int i = 0; i < CPXgetnumcols(env,lp); i++) {
printf("v%d = %f, ", i,dj[i]);
if ((i+1) % 10 == 0) printf("\n");
}
if(CPXchgprobtype(env, lp, type)) abort();
當我打印陣列DJ,這是全0。我也嘗試使用CPXgetdj
而不是CPXsolution
,結果相同。
看完後this我相信我所做的是正確的。但它似乎並不奏效。我的問題有20000個變量,我已經嘗試了一堆,它總是說0 ...
我有一個小的時間限制,所以它不證明最優性(但它確實找到了一個整數解決方案),我不確定這件事。
由於
你得到同樣的行爲,如果你與互動嘗試爲[這裏]描述(http://www-01.ibm.com/support/docview.wss? UID = swg21400009)? – rkersh
感謝您的提示。我剛剛嘗試過。當MIP的「寫入解決方案」時,沒有關於約束的雙重信息,也沒有降低變量的成本值。然後我輸入「更改問題修復」,再次解決,再次保存解決方案,這次所有約束都有一個雙重值(非0),但所有變量的成本都降低了0.所以我猜我的C代碼沒有錯?如何降低成本爲0?看起來很奇怪。另外,約束的雙重性給了我什麼信息? (我是新來的優化...)謝謝! – ddeunagomez
難道我所有的方程都是方程,而且沒有不等式嗎? – ddeunagomez