00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #if defined(_MSC_VER)
00014
00015 # pragma warning(disable:4786)
00016 #endif
00017 #include <iomanip>
00018 #include <fstream>
00019
00020 #include <stdlib.h>
00021
00022 #include "CoinTime.hpp"
00023 #include "CoinError.hpp"
00024
00025 #include "BonCouenneInterface.hpp"
00026 #include "BonIpoptSolver.hpp"
00027
00028 #include "CoinHelperFunctions.hpp"
00029 #include "BonCouenneSetup.hpp"
00030
00031 #include "BonCbc.hpp"
00032
00033 #include "CbcCutGenerator.hpp"
00034 #include "CouenneProblem.hpp"
00035 #include "CouenneCutGenerator.hpp"
00036
00037 #include "asl.h"
00038 #include "nlp.h"
00039 #include "getstub.h"
00040 #include "r_opn.hd"
00041 #include "opcode.hd"
00042
00043 using namespace Couenne;
00044
00045 static int empty_int = 0;
00046
00047 static keyword keywds[] = {
00048 KW(const_cast<char*>("empty"),
00049 I_val,
00050 empty_int,
00051 const_cast<char*>("nothing")),
00052 };
00053
00054 extern Option_Info Oinfo;
00055
00056 using namespace Bonmin;
00057
00058
00060 int main (int argc, char *argv[]) {
00061 WindowsErrorPopupBlocker();
00062 using namespace Ipopt;
00063
00064 Bonmin::Bab bb;
00065 bb.setUsingCouenne (true);
00066
00067 CouenneSetup bonmin;
00068 bonmin.InitializeCouenne (argv);
00069
00070 SmartAsl *aslfg = new SmartAsl;
00071 aslfg -> asl = readASLfg (argv);
00072
00073 int NumberOfVariables = bonmin.couennePtr () -> Problem () -> nOrigVars ();
00074
00075 typedef struct {char *msg; int code, wantsol;} Sol_info;
00076
00077 static SufDecl suftab [] = {
00078 {const_cast<char*>("newlb"), 0,
00079 ASL_Sufkind_var | ASL_Sufkind_real | ASL_Sufkind_output, 0},
00080 {const_cast<char*>("newub"), 0,
00081 ASL_Sufkind_var | ASL_Sufkind_real | ASL_Sufkind_output, 0}};
00082
00083 suf_declare_ASL (aslfg -> asl, suftab, sizeof (suftab) / sizeof (SufDecl));
00084
00085
00086 SufDesc* vnewLb = suf_get_ASL(aslfg -> asl, "newlb", ASL_Sufkind_var);
00087 SufDesc* vnewUb = suf_get_ASL(aslfg -> asl, "newub", ASL_Sufkind_var);
00088
00089 vnewLb -> u.r = (real*)M1zapalloc_ASL(&aslfg -> asl->i, NumberOfVariables * sizeof(real));
00090 vnewUb -> u.r = (real*)M1zapalloc_ASL(&aslfg -> asl->i, NumberOfVariables * sizeof(real));
00091
00092 const double
00093 *newL = bonmin.couennePtr () -> Problem () -> Lb (),
00094 *newU = bonmin.couennePtr () -> Problem () -> Ub ();
00095
00096
00097
00098
00099
00100
00101 for(int i = 0; i < NumberOfVariables; i++) {
00102 vnewLb->u.r[i] = newL [i];
00103 vnewUb->u.r[i] = newU [i];
00104 }
00105
00106 write_sol_ASL (aslfg -> asl, const_cast<char*>("tightened bounds"), 0, 0, &Oinfo);
00107 return 0;
00108 }