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

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


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

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

Á¦ ¸ñ
[RE]Á¦¾àÁ¶°ÇÀÇ Å©±â¿Í °ü·ÃµÈ Áú¹®ÀÔ´Ï´Ù.
ÀÛ¼ºÀÚ
Àå¿ë¼º
ÀÛ¼ºÀÏ
2003-09-30
Á¶È¸¼ö 990 È¸
÷ºÎÆÄÀÏ Ã·ºÎµÈ ÆÄÀϾøÀ½.
¿ì¼± callable library¸¦ »ç¿ëÇϱⰡ ºÒÆíÇϱ⠶§¹®¿¡ °¡Àå ÁÁÀº ¹æ¹ýÀº concert¸¦ »ç¿ëÇØ¼­ ¹®Á¦¸¦ Ç¥ÇöÇÏ´Â °Ô »ó´çÈ÷ ½¬¿ï °Å¶ó°í »ý°¢Çϱ¸¿ä, ±×·² »çÁ¤ÀÌ ¾È µÇ½Ã¸é concertó·³ µ¥ÀÌÅ͸¦ ó¸®ÇÒ ¼ö ÀÖ°Ô lp¸¦ Ç¥ÇöÇϱâ À§ÇÑ Å¬·¡½º°¡ ÇÊ¿äÇÕ´Ï´Ù. ¿¹¸¦µé¾î MyCplex¶ó´Â Ŭ·¡½º¸¦ ¸¸µé¾î¼­ ±× ¾È¿¡¼­ addRow(), startColumn(), addNzToCurrentColumn(), endColumn()µîÀÇ ¸â¹ö¸¦ ÅëÇØ¼­ Á¢±ÙÇÏ½Ã¸é ½¬¿ï ¼ö ÀÖÀ» °Å °°±¸¿ä.

°¢ º¯¼ö¸¦ ¸¸µé¶§´Â ÇÊ¿ä¾ø´Â º¯¼ö¸¦ Á¦°ÅÇϱâ À§Çؼ­ ÄÄÆÄÀÏ·¯°¡ Áö¿øÀ» ÇØÁÙ ¼ö ÀÖ´Ù¸é mapÀ» ÅëÇØ¼­ À妽º·Î °ü¸®¸¦ ÇØÁֽô °Ô ÁÁÀ» °Í °°±¸¿ä. º¯¼ö³ª Á¦¾à½ÄÀº Á¾·ùº°·Î ¹è¿­À» ¸¸µå½Ã´Â °Ô ÁÁÀ» °Í °°½À´Ï´Ù.. Á¾·ùº°·Î Ŭ·¡½º¸¦ ¸¸µå½Ã´Â °Íµµ À¯¿ëÇÒ °Ì´Ï´Ù.
¿¹¸¦ µé¾î Á¦¾à½ÄÀÇ Á¾·ùº°·Î MySetRowsŬ·¡½º¸¦ ¸¸µé°Å³ª, º¯¼öÀÇ Á¾·ùº°·Î MySetColumnsŬ·¡½º¸¦ ¸¸µé¾î¼­ ±× ¾È¿¡ º¯¼ö³ª Á¦¾à½Ä¿¡ ÇØ´çµÇ´Â ÀڷḦ Áý¾î³Ö´Â °Ì´Ï´Ù.

¾Æ¸¶ Á¦°¡ À§¿¡¼­ ¾ð±ÞÇß´ø MyCplex Ŭ·¡½º Á¤ÀǸ¸ ÇØµµ ¸¹ÀÌ ¼ö¿ùÇØ Áú °Å¶ó°í º¾´Ï´Ù. ¼ö°íÇϼ¼¿ä..

º¸¾È»ó ¸ðµç ºÎºÐÀº ºÒ°¡´ÉÇϱ¸¿ä, ÀϺΠÇÔ¼ö¸¦ º¸¿©µå¸®°Ú½À´Ï´Ù..
IlCgCplex::IlCgCplex(int c,int r,int z)
:numRows_(0), numCols_(0),
numNz_(0), numColNz_(0), clp_(0), maxMipMins_(-1)
{

obj_.reserve(c);
rhs_.reserve(r);
sense_.reserve(r);
matbeg_.reserve(c);
matcnt_.reserve(r);
matind_.reserve(z);
matval_.reserve(z);
lb_.reserve(c);
ub_.reserve(c);
rngval_.reserve(c);


env_ = CPXopenCPLEX(&status_);

if (env_ == 0)
{
char errorMsg[1024];
CPXgeterrorstring(env_, status_, errorMsg);
cout << "Could not open CPLEX environment" << endl;
cout << errorMsg << endl;
exit(1);
}

objSense_ = MIN;
}


void
IlCgCplex::addRow(double rhs, double rngval, char sense)
{
rhs_.push_back(rhs);
rngval_.push_back(rngval);
sense_.push_back(sense);
if (sense != ''L'' && sense != ''G'' && sense != ''E'')
terminate("Sense of Row wrong");
numRows_++;

}

void
IlCgCplex::startColumn(double obj, double lb, double ub)
{
assert(numColNz_ == 0);
matbeg_.push_back(numNz_);
obj_.push_back(obj);
lb_.push_back(lb);
ub_.push_back(ub);
}
void
IlCgCplex::endColumn()
{
matcnt_.push_back(numColNz_);
numColNz_ = 0;

numCols_++;
}

void
IlCgCplex::addNzToCurrentColumn(int row, double val)
{

if (clp_ != 0)
assert(row < getNumRows() + numRows_);
else
assert(row < numRows_);

matind_.push_back(row);
matval_.push_back(val);
numNz_++;
numColNz_++;
}

void
IlCgCplex::registerLp()
{

clp_ = CPXcreateprob(env_, &status_, "DynColGen");
if(clp_ == 0)
{
terminate("Failed to Create LP ");
}
status_ = CPXcopylp(env_, clp_, numCols_, numRows_,objSense_,
&obj_[0], &rhs_[0], &sense_[0], &matbeg_[0],&matcnt_[0],&matind_[0],&matval_[0],
&lb_[0], &ub_[0],&rngval_[0]);

if(status_)
{
terminate("Failed to Copy LP");
}
resetColumns();
resetRows();
#if 0
CPXcheckcopylp(env_, clp_, numCols_, numRows_, objSense_,
obj_.getElements(), rhs_.getElements(),
sense_.getElements(), matbeg_.getElements(),
matcnt_.getElements(), matind_.getElements(),
matval_.getElements(), lb_.getElements(), ub_.getElements(),
rngval_.getElements());
#endif
}
°ü·Ã±Û º¸±â
"[RE]Á¦¾àÁ¶°ÇÀÇ Å©±â¿Í °ü·ÃµÈ Áú¹®ÀÔ´Ï´Ù."¿Í(°ú) °ü·ÃµÈ ±ÛÀÌ  3°Ç ÀÖ½À´Ï´Ù.
Á¦¾àÁ¶°ÇÀÇ Å©±â¿Í °ü·ÃµÈ Áú¹®ÀÔ´Ï´Ù. ¼º¿µÅ 2003-09-30
[RE]Á¦¾àÁ¶°ÇÀÇ Å©±â¿Í °ü·ÃµÈ Áú¹®ÀÔ´Ï´Ù. Àå¿ë¼º 2003-09-30
   [RE][RE]Á¦¾àÁ¶°ÇÀÇ Å©±â¿Í °ü·ÃµÈ Áú¹®ÀÔ´Ï´Ù. ¼º¿µÅ 2003-09-30
    [RE][RE][RE]Á¦¾àÁ¶°ÇÀÇ Å©±â¿Í °ü·ÃµÈ Áú¹®ÀÔ´Ï´Ù. Àå¿ë¼º 2003-09-30