Я решаю проблему MIP с помощью CPLEX. После его решения я хочу снизить расходы. Я отдаю себе отчет в том, что снижение затрат не существует для 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();
При печати диджей массива, это все 0. Я также попытался использовать CPXgetdj
вместо CPXsolution
, с тем же результатом.
После прочтения this Я верю, что я делаю правильно. Но, похоже, это не работает. У моих проблем есть 20000 переменных, и я пробовал с их связью, и он всегда говорит 0 ...
У меня есть небольшой временной интервал, поэтому он не доказывает оптимальность (но он находит целочисленное решение), Я не уверен в этом.
Благодаря
Вы получаете такое же поведение, если вы попытаетесь с интерактивными, как описано [здесь] (http://www-01.ibm.com/support/docview.wss? UID = swg21400009)? – rkersh
Спасибо за подсказку. Я просто попробовал. Когда «написать решение» MIP, нет двойной информации об ограничениях или сокращения значений затрат для переменных. Затем я набираю «исправление проблемы с изменением», снова решусь, снова сохраняю решение, и на этот раз все ограничения имеют двойное значение (не 0), но все переменные имеют уменьшенную стоимость 0. Так что я думаю, что мой код C не был неправильным? Каким образом сокращенные расходы равны 0? Кажется очень странным. Кроме того, какая информация дает мне двойственность ограничения? (Я новичок в оптимизации ...) Спасибо! – ddeunagomez
Может ли это иметь значение, что все мои уравнения - это уравнения, а не неравенства? – ddeunagomez