ILOG logo
KSTEC ȸ¿øÀ¸·Î °¡ÀÔÇϼ¼¿ä¤Ó»õ¼Ò½Ä | ·Î±×ÀÎ
 
title element1
License
- ¶óÀ̼¾½º
- ¶óÀ̼¾½º °ü¸®
Maintenance
Training
FAQ
Q&A

Q & A ... °Ô½ÃÆÇ  (Optimization)


¡Ø ¾È³çÇϽʴϱî..?
    ÀúÈñ KSTECÀÇ Á¦Ç°À̳ª ¼­ºñ½º¿¡ ´ëÇØ ±Ã±ÝÇϽŠÁ¡À̳ª ±â¼úÁö¿øÀ» ¿øÇϽô °í°´´ÔÀº ȸ»ç¸í,
    ºÎ¼­¸í, ¼º¸í, »ç¿ëÁ¦Ç°¸í, Á¦Ç° VERSIONÀ» ¸í½ÃÇÏ¿© Áֽñ⠹ٶø´Ï´Ù.

¡Ø °Ô½ÃÇϽг»¿ë¿¡ ´ëÇØ¼­´Â ½Å¼ÓÇÏ°Ô ´äº¯ÇØ µå¸®°Ú½À´Ï´Ù.
¡Ø ÇØ´çµÇ´Â Á¦Ç°±ºÀ» ¼±ÅÃÇϽŠÈÄ ÇÏ°í ½ÍÀ¸½Å ¸»¾¸À» Àû¾î ÁֽʽÿÀ.

Á¦ ¸ñ
Callback ÇÔ¼ö¿¡¼­ Á¦°øÇÏ´Â ÇÔ¼ö¸¦ »ç¿ëÇϼ¼¿ä
ÀÛ¼ºÀÚ
¼Ò°æÃ¶
ÀÛ¼ºÀÏ
2002-01-21
Á¶È¸¼ö 1598 È¸
÷ºÎÆÄÀÏ Ã·ºÎµÈ ÆÄÀϾøÀ½.
ÇöÀç ¹®Á¦°¡ µÇ´Â ¿¹»ó ºÎºÐÀº, name class¸¦ »ç¿ëÇÏ´Â ºÎºÐ°ú, callback ÇÔ¼ö ³»¿¡¼­ º¯¼öÀÇ °ªÀ» °¡Á®¿À´Â ºÎºÐÀÔ´Ï´Ù.

ù¹øÂ°, name class¸¦ »ç¿ëÇÏ´Â ºÎºÐÀÔ´Ï´Ù. ÀÌ ºÎºÐÀº ÀÌ¹Ì ilocplex.h ÆÄÀÏ¿¡¼­ Á¦°øÇϰí Àֱ⠶§¹®¿¡, ¿©±â¼­ ´Ù½Ã ³Ö¾îÁÙ Çʿ䰡 ¾ø½À´Ï´Ù.
(#include ¸¦ ÇØÁÖ½Ã¸é µË´Ï´Ù.)

callbackÀ» »ç¿ëÇÑ ¿¹Á¦¸¦ Çϳª º¸¿©µå¸®°Ú½À´Ï´Ù.

#include
ILOSTLBEGIN

IloNum oldObj = 10000;
IloNum newObj = 0;

ILOMIPCALLBACK1(MyCallback, IloNumVarArray, vars) {

newObj = getIncumbentObjValue();

IloNum i = 1;
if (oldObj > newObj) {
cout() << \"Solution value = \" << newObj << endl;
cout() << \"Values = \" << getIncumbentValue(vars[i])<< endl;
cout() << \"Iterations = \" << getNiterations() << endl;
oldObj = newObj;
}
}


int main() {
...

IloCplex cplex(env);
cplex.use(MyCallback(env, vars)); // À§¿¡ ¼±¾ðÇÑ callback ÇÔ¼ö »ç¿ë
...
}


µÎ¹øÂ°, callback ÇÔ¼ö ³»¿¡¼­ º¯¼öÀÇ °ªÀ» ºÒ·¯¿À´Â °úÁ¤¿¡¼­ ¹®Á¦°¡ ¹ß»ýÇßÀ» ¼öµµ ÀÖ½À´Ï´Ù. callback ÇÔ¼ö ³»¿¡¼­ ¹Ì¸® Á¦°øµÇ´Â ¸â¹öÇÔ¼öµéÀÌ ¸¹ÀÌ Àֱ⠶§¹® IloEnv °´Ã¼¿Í IloCplex °´Ã¼´Â Àμö·Î ³Ñ°ÜÁÖÁö ¾ÊÀ¸¼Åµµ µË´Ï´Ù. µû¶ó¼­, ÇöÀçÀÇ ¸ñÀûÇÔ¼ö°ªÀ» °¡Á®¿À±â À§ÇØ »ç¿ëµÇ´Â getIncumbentObjValue() ÇÔ¼öó·³, ÇöÀçÀÇ º¯¼ö°ªÀ» °¡Á®¿À±â À§ÇÑ ÇÔ¼ö·Î getIncumbentValue(const IloNumVar var)°¡ Á¦°øµÇ°í ÀÖÀ¸´Ï ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.



:¹ÚÀμø´ÔÀÇ ±ÛÀÔ´Ï´Ù.

:¾È³çÇϼ¼¿ä. CPLEX7.0 concert tech.¸¦ »ç¿ë ÁßÀÎ KAIST ÀüÀÚ°ú ¹ÚÀμøÀÔ´Ï´Ù.
:Áö³­ ¹ø¿¡ ´äº¯Áּż­ °¨»çÇÕ´Ï´Ù.
:±×·±µ¥ ¶Ç ¹®Á¦°¡ »ý°Ü¼­¿ä.
:
:ÀÏ´Ü callback ÇÔ¼ö´Â ¸¸µé¾ú½À´Ï´Ù.
:ÇÔ¼ö ¾È¿¡¼­ feasible solutionÀÇ °ªµéÀ» ÀúÀåÇÏ°í ½ÍÀºµ¥¿ä...
:cplex.getValue()¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇϴµ¥,
:
:\"0x101b352c¿¡ ÀÖ´Â ¸í·ÉÀÌ 0x00000004ÀÇ ¸Þ¸ð¸®¸¦ ÂüÁ¶Çß½À´Ï´Ù.
:¸Þ¸ð¸®´Â writtenµÉ ¼ö ¾ø¾ù½À´Ï´Ù.\"
:
:¶ó´Â ÀÀ¿ë ÇÁ·Î±×·¥ ¿À·ù ¸Þ½ÃÁö°¡ ¶ß´Â±º¿ä...
:¾î¶»°Ô ÇØ¾ß ¿À·ù ¸Þ¼¼Áö ¾øÀÌ solutionÀÇ °ªÀ» ¾òÀ» ¼ö ÀÖÀ»±î¿ä?
:
:Á¦°¡ ¸¸µç callback ÇÔ¼ö´Â ´ÙÀ½°ú °°½À´Ï´Ù.
:====
:#define MIPCALLBACK2(name, type1, x1, type2, x2) \\
:class name : public IloCplex::MIPCallback {\\
: type1 x1;\\
: type2 x2;\\
:public:\\
: name(type1 xx1, type2 xx2) : x1(xx1), x2(xx2) {}\\
: void main();\\
:};\\
:void name::main()
:
:IloNum newObj, oldObj=100000;
:
:
:MIPCALLBACK2(MyCallback, IloCplex, cplex, IloNumVarArray, var) {
: newObj=getIncumbentObjValue();
: if (oldObj>newObj){
:
: IloInt i=1;
: if ( var[i].getName() ) cout << var[i].getName() << cplex.getValue(var[i]) << endl;
: oldObj=newObj;
: }
:}
:
°ü·Ã±Û º¸±â
"Callback ÇÔ¼ö¿¡¼­ Á¦°øÇÏ´Â ÇÔ¼ö¸¦ »ç¿ëÇϼ¼¿ä"¿Í(°ú) °ü·ÃµÈ ±ÛÀÌ  1°Ç ÀÖ½À´Ï´Ù.
[Q] Callback ÇÔ¼ö ³»¿¡¼­ solution value Ç¥½Ã ¹ÚÀμø 2002-01-18
Callback ÇÔ¼ö¿¡¼­ Á¦°øÇÏ´Â ÇÔ¼ö¸¦ »ç¿ëÇϼ¼¿ä ¼Ò°æÃ¶ 2002-01-21