15 #include "CoinHelperFunctions.hpp"
20 using namespace Couenne;
65 for(
unsigned int i=0; i<other.
listInt.size(); i++) {
74 if(other.
sol != NULL) {
82 if (other.
modSol != NULL) {
115 const int givenCard) {
122 printf(
"### ERROR: CouenneRecordBestSol::setInitIsInt(): cardInitDom: %d givenCard: %d\n",
cardInitDom, givenCard);
129 printf(
"### ERROR: CouenneRecordBestSol::setInitIsInt(): cardInitDom: %d givenCard: %d\n",
cardInitDom, givenCard);
133 CoinCopyN(givenIsInt, givenCard,
initIsInt);
136 for(
int i=0; i<givenCard; i++) {
145 const int givenCard) {
151 printf(
"### ERROR: CouenneRecordBestSol::setInitDomLb(): cardInitDom: %d givenCard: %d\n",
cardInitDom, givenCard);
158 printf(
"### ERROR: CouenneRecordBestSol::setInitDomLb(): cardInitDom: %d givenCard: %d\n",
cardInitDom, givenCard);
162 CoinCopyN(givenLb, givenCard,
initDomLb);
167 const int givenCard) {
173 printf(
"### ERROR: CouenneRecordBestSol::setInitDomUb(): cardInitDom: %d givenCard: %d\n",
cardInitDom, givenCard);
180 printf(
"### ERROR: CouenneRecordBestSol::setInitDomUb(): cardInitDom: %d givenCard: %d\n",
cardInitDom, givenCard);
184 CoinCopyN(givenUb, givenCard,
initDomUb);
199 const double givenMaxViol) {
202 sol =
new double[givenCard];
204 modSol =
new double[givenCard];
212 double *newSol =
new double [givenCard];
213 CoinCopyN (givenSol, givenCard, newSol);
219 CoinCopyN(givenSol, givenCard,
sol);
223 printf(
"CouenneRecordBestSol::setSol(): New solution set\n");
232 printf(
"CouenneRecordBestSol::setVal(): set to %10.6f\n", givenVal);
241 const double givenVal,
const double givenMaxViol) {
243 setSol(givenSol, givenCard, givenMaxViol);
251 printf(
" CouenneRecordBestSol::update(): ### ERROR: modSol == NULL\n");
260 const double *solB,
const double solBVal,
const double solBMaxViol,
const bool solBIsFeas,
262 const double precision) {
266 if(solAVal < solBVal - precision) {
284 if(solAMaxViol < solBMaxViol) {
307 case 0:
update(solA, cardSol, solAVal, solAMaxViol);
break;
308 case 1:
update(solB, cardSol, solBVal, solBMaxViol);
break;
310 default: printf(
"CouenneRecordBestSol::compareAndSave(): ### ERROR: retval: %d\n",
321 modSol =
new double[expectedCard];
325 printf(
"CouenneRecordBestSol::getModSol(): ### ERROR: expectedCard: %d cardModSol: %d", expectedCard,
cardModSol);
334 const int givenModCard,
335 const double givenModVal,
336 const double givenModMaxViol) {
338 if(givenModSol != NULL) {
341 modSol =
new double[givenModCard];
348 double *newModSol =
new double [givenModCard];
349 CoinCopyN (givenModSol, givenModCard, newModSol);
355 CoinCopyN(givenModSol, givenModCard,
modSol);
365 fprintf(fsol,
"%d\n",
cardSol);
367 fprintf(fsol,
" %12.8f",
sol[i]);
372 if(cardSol % 10 != 0) {
375 fprintf(fsol,
"Value: %16.14g\n",
val);
376 fprintf(fsol,
"Tolerance: %16.14g\n",
maxViol);
std::vector< int > listInt
CouenneRecordBestSol()
Constructor.
void setVal(const double givenVal)
void setSol(const double *givenSol, const int givenCard, const double givenMaxViol)
void setInitIsInt(const bool *givenIsInt, const int givenCard)
void setInitDomUb(const CouNumber *givenUb, const int givenCard)
void printSol(FILE *fsol) const
int compareAndSave(const double *solA, const double solAVal, const double solAMaxViol, const bool solAIsFeas, const double *solB, const double solBVal, const double solBMaxViol, const bool solBIsFeas, const int cardSol, const double precision)
double CouNumber
main number type in Couenne
~CouenneRecordBestSol()
Destructor.
void setCardSol(const int givenCard)
void setModSol(const double *givenModSol, const int givenModCard, const double givenModVal, const double givenModMaxViol)
double * getModSol(const int expectedCard)
void setHasSol(const bool givenHasSol)
void setInitDomLb(const CouNumber *givenLb, const int givenCard)