|
 |
 |
 |
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 } |
|
|
|
|
|
°ü·Ã±Û º¸±â
|
|
|
|
|