coin-or / SHOT

A solver for mixed-integer nonlinear optimization problems
https://shotsolver.dev
Eclipse Public License 2.0
117 stars 25 forks source link

getDualAuxiliaryObjectiveVariableIndex uninitialized in Cbc interface #46

Closed svigerske closed 4 years ago

svigerske commented 4 years ago

This code in MIPSolverCbc.cpp:518 leads to a segmentation fault on GAMS model library model fuel with Cbc as MIP solver:

    if(MIPSolutionStatus == E_ProblemSolutionStatus::Infeasible)
    {
        if(env->reformulatedProblem->objectiveFunction->properties.classification
            == E_ObjectiveFunctionClassification::QuadraticConsideredAsNonlinear)
        {
            osiInterface->setColBounds(getDualAuxiliaryObjectiveVariableIndex(), -1000000000.0, 1000000000.0);

getDualAuxiliaryObjectiveVariableIndex() returns garbage (uninitialized value).

I'm using SHOT master (6e1409bf).

Last lines of the log before:

    Iteration     │  Time  │    Cuts     │     Objective value     │  Objective diff.   
     #: type      │  tot.  │   + | tot.  │    problem | line srch  │    abs. | rel.    
╶─────────────────┴────────┴─────────────┴─────────────────────────┴──────────────────╴

     1: LP           0.05                      -1e+12 | -1e+12          inf. | inf.    
     2: LP           0.05      2 | 2             -550 | 755.127      1.3e+03 | 2.4e+00 
     3: LP           0.08      2 | 4             -550 | 254.386      8.0e+02 | 1.5e+00 
     4: LP           0.08      2 | 6          -307.27 | 204.461      5.1e+02 | 1.7e+00 
     5: LP           0.08      2 | 8         -100.909 | 127.407      2.3e+02 | 2.3e+00 
andreaslundell commented 4 years ago

I cannot reproduce this (I added some asserts as well to https://github.com/coin-or/SHOT/tree/issue46). Are you calling SHOT from GAMS? Is it the same behavior if calling it directly? I cannot seem to use GAMS 30.3 with the current version of SHOT (crashes), so I cannot verify it myself...

svigerske commented 4 years ago

I can try with the SHOT executable tomorrow - need to build a Cbc first.

hasDualAuxiliaryObjectiveVariable() is false, so it's not just a check for hasDualAuxiliaryObjectiveVariable() missing?

andreaslundell commented 4 years ago

Ok, strange. hasDualAuxiliaryObjectiveVariable should be true, since the objective function is quadratic and Cbc in SHOT does not support quadratic objectives, and thus introduces an auxiliary variable that it minimizes in the MIP problem... I'll take a closer look tomorrow as well.

andreaslundell commented 4 years ago

Could you run SHOT with debug enabled (Output.Debug.Enable=true), zip the directory created (default debug/problemname), and send it to me? Then I could better debug the situation...

svigerske commented 4 years ago

I should have given you more output and backtraces from the beginning on. I see TaskCreateDualProblem::createProblem() call destination->setDualAuxiliaryObjectiveVariableIndex(), but the MIPSolverCbc object where this sets the dualauxiliaryobjectivevariableindex is different from the one where the error happens later.

SHOT             31.0.0 rb9ce796 ALFA Released  6Apr20 LEG x86 64bit/Linux    

╶ Supporting Hyperplane Optimization Toolkit (SHOT) ──────────────────────────────────────────────────────────────────╴

 Andreas Lundell and Jan Kronqvist, Åbo Akademi University, Finland.
 See documentation for full list of contributors and utilized software libraries.

 Version: 1.0.alpha 1. Git hash: 6e1409bf. Released Apr  8 2020. 

 For more information visit https://shotsolver.dev

 Reading options from /home/stefan/work/gams/build/gms test/mod test/shot.opt
Starting to copy variables between GAMS modeling and SHOT problem objects.
Finished copying variables between GAMS modeling and SHOT problem objects.
Starting to copy objective function between GAMS modeling and SHOT problem objects.
Finished copying objective function between GAMS modeling and SHOT problem objects.
Starting to copy constraints between GAMS modeling and SHOT problem objects.
Finished copying constraints between GAMS modeling and SHOT problem objects.
Starting to copy linear terms between GAMS modeling and SHOT problem objects.
Finished copying linear terms between GAMS modeling and SHOT problem objects.
Starting to copy quadratic terms between GAMS modeling and SHOT problem objects.
Finished copying quadratic terms between GAMS modeling and SHOT problem objects.
Starting to copy nonlinear expressions between GAMS modeling and SHOT problem objects.
Finished copying nonlinear expressions between GAMS modeling and SHOT problem objects.
 Performing bound tightening on reformulated problem.
  Bound tightening pass 1 of 5.
 Bounds tightened for variable poil(period-1):  [-1e+50,1e+50] -> [0.0,1e+50].
  bound tightened using linear term in constraint lowoil(period-1) .
 Bounds tightened for variable poil(period-2):  [-1e+50,1e+50] -> [0.0,1e+50].
  bound tightened using linear term in constraint lowoil(period-2) .
 Bounds tightened for variable poil(period-3):  [-1e+50,1e+50] -> [0.0,1e+50].
  bound tightened using linear term in constraint lowoil(period-3) .
 Bounds tightened for variable poil(period-1):  [0.0,1e+50] -> [0.0,500.0].
  bound tightened using linear term in constraint maxoil(period-1) .
 Bounds tightened for variable poil(period-2):  [0.0,1e+50] -> [0.0,500.0].
  bound tightened using linear term in constraint maxoil(period-2) .
 Bounds tightened for variable poil(period-3):  [0.0,1e+50] -> [0.0,500.0].
  bound tightened using linear term in constraint maxoil(period-3) .
 Bounds tightened for variable oil(period-1):   [0.0,1e+50] -> [0.0,3500.0].
  bound tightened using linear term in constraint floweq(period-1) .
 Bounds tightened for variable volume(period-1):    [0.0,4000.0] -> [0.0,3500.0].
  bound tightened using linear term in constraint floweq(period-1) .
 Bounds tightened for variable oil(period-2):   [0.0,1e+50] -> [0.0,4500.0].
  bound tightened using linear term in constraint floweq(period-2) .
 Bounds tightened for variable oil(period-3):   [0.0,1e+50] -> [0.0,2500.0].
  bound tightened using linear term in constraint floweq(period-3) .
 Bounds tightened for variable volume(period-2):    [0.0,4000.0] -> [1500.0,4000.0].
  bound tightened using linear term in constraint floweq(period-3) .
 Bounds tightened for variable poil(period-2):  [0.0,500.0] -> [200.0,500.0].
  bound tightened using linear term in constraint demcons(period-2) .
  Bound tightening pass 2 of 5.
  - Bounds for 8 variables tightened in 0.00 s.
 Cbc selected as MIP solver.
 Creating dual problem

Breakpoint 1, SHOT::TaskCreateDualProblem::createProblem (this=0x55555562a440, destination=..., sourceProblem=...) at TaskCreateDualProblem.cpp:74
74  {
(gdb) bt
#0  SHOT::TaskCreateDualProblem::createProblem (this=0x55555562a440, destination=..., sourceProblem=...) at TaskCreateDualProblem.cpp:74
#1  0x00007ffff6c0ca5c in SHOT::TaskCreateDualProblem::TaskCreateDualProblem (this=0x55555562a440, envPtr=...) at TaskCreateDualProblem.cpp:29
#2  0x00007ffff6be8035 in __gnu_cxx::new_allocator<SHOT::TaskCreateDualProblem>::construct<SHOT::TaskCreateDualProblem, std::shared_ptr<SHOT::Environment>&> (this=0x7fffffffbeef, __p=0x55555562a440)
    at /usr/include/c++/9.3.0/ext/new_allocator.h:147
#3  0x00007ffff6be69e8 in std::allocator_traits<std::allocator<SHOT::TaskCreateDualProblem> >::construct<SHOT::TaskCreateDualProblem, std::shared_ptr<SHOT::Environment>&> (__a=..., __p=0x55555562a440)
    at /usr/include/c++/9.3.0/bits/alloc_traits.h:484
#4  0x00007ffff6be4430 in std::_Sp_counted_ptr_inplace<SHOT::TaskCreateDualProblem, std::allocator<SHOT::TaskCreateDualProblem>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<std::shared_ptr<SHOT::Environment>&> (this=0x55555562a430, __a=...) at /usr/include/c++/9.3.0/bits/shared_ptr_base.h:548
#5  0x00007ffff6be267e in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<SHOT::TaskCreateDualProblem, std::allocator<SHOT::TaskCreateDualProblem>, std::shared_ptr<SHOT::Environment>&> (
    this=0x7fffffffc088, __p=@0x7fffffffc080: 0x0, __a=...) at /usr/include/c++/9.3.0/bits/shared_ptr_base.h:679
#6  0x00007ffff6be1c0c in std::__shared_ptr<SHOT::TaskCreateDualProblem, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<SHOT::TaskCreateDualProblem>, std::shared_ptr<SHOT::Environment>&> (
    this=0x7fffffffc080, __tag=...) at /usr/include/c++/9.3.0/bits/shared_ptr_base.h:1344
#7  0x00007ffff6be14bd in std::shared_ptr<SHOT::TaskCreateDualProblem>::shared_ptr<std::allocator<SHOT::TaskCreateDualProblem>, std::shared_ptr<SHOT::Environment>&> (this=0x7fffffffc080, __tag=...)
    at /usr/include/c++/9.3.0/bits/shared_ptr.h:359
#8  0x00007ffff6be078f in std::allocate_shared<SHOT::TaskCreateDualProblem, std::allocator<SHOT::TaskCreateDualProblem>, std::shared_ptr<SHOT::Environment>&> (__a=...)
    at /usr/include/c++/9.3.0/bits/shared_ptr.h:702
#9  0x00007ffff6bdf8e5 in std::make_shared<SHOT::TaskCreateDualProblem, std::shared_ptr<SHOT::Environment>&> () at /usr/include/c++/9.3.0/bits/shared_ptr.h:718
#10 0x00007ffff6bec8bf in SHOT::SolutionStrategyMultiTree::SolutionStrategyMultiTree (this=0x55555567a9c0, envPtr=...) at SolutionStrategyMultiTree.cpp:111
#11 0x00007ffff69db22e in std::make_unique<SHOT::SolutionStrategyMultiTree, std::shared_ptr<SHOT::Environment>&> () at /usr/include/c++/9.3.0/bits/unique_ptr.h:857
#12 0x00007ffff69bbb10 in SHOT::Solver::selectStrategy (this=0x7fffffffc800) at Solver.cpp:457
#13 0x00007ffff69bb454 in SHOT::Solver::setProblem (this=0x7fffffffc800, problem=..., modelingSystem=...) at Solver.cpp:440
(gdb) next
77      bool variablesInitialized = true;
(gdb) 
79      for(auto& V : sourceProblem->allVariables)
(gdb) 
82              && destination->addVariable(V->name.c_str(), V->properties.type, V->lowerBound, V->upperBound);
(gdb) until
81          variablesInitialized = variablesInitialized
(gdb) 
82              && destination->addVariable(V->name.c_str(), V->properties.type, V->lowerBound, V->upperBound);
(gdb) 
79      for(auto& V : sourceProblem->allVariables)
(gdb) 
85      if(!variablesInitialized)
(gdb) 
88      if(sourceProblem->auxiliaryObjectiveVariable) // The source problem already has a nonlinear objective variable
(gdb) next
92      else if(sourceProblem->objectiveFunction->properties.classification > E_ObjectiveFunctionClassification::Quadratic)
(gdb) print sourceProblem->objectiveFunction->properties.classification
$1 = SHOT::E_ObjectiveFunctionClassification::QuadraticConsideredAsNonlinear
(gdb) next
94          double objVarBound = env->settings->getSetting<double>("Variables.NonlinearObjectiveVariable.Bound", "Model");
(gdb) 
96          Interval objectiveBound;
(gdb) 
100             objectiveBound = sourceProblem->objectiveFunction->getBounds();
(gdb) 
107         destination->setDualAuxiliaryObjectiveVariableIndex(sourceProblem->properties.numberOfVariables);
(gdb) print destination 
$2 = {<std::__shared_ptr<SHOT::IMIPSolver, (__gnu_cxx::_Lock_policy)2>> = {<std::__shared_ptr_access<SHOT::IMIPSolver, (__gnu_cxx::_Lock_policy)2, false, false>> = {<No data fields>}, _M_ptr = 0x55555567b9d0, 
    _M_refcount = {_M_pi = 0x55555567b9c0}}, <No data fields>}
(gdb) print sourceProblem->properties.numberOfVariables
$3 = 15
(gdb) step
std::__shared_ptr_access<SHOT::IMIPSolver, (__gnu_cxx::_Lock_policy)2, false, false>::operator-> (this=0x7fffffffbcf0) at /usr/include/c++/9.3.0/bits/shared_ptr_base.h:1015
1015        return _M_get();
(gdb) 
std::__shared_ptr_access<SHOT::IMIPSolver, (__gnu_cxx::_Lock_policy)2, false, false>::_M_get (this=0x7fffffffbcf0) at /usr/include/c++/9.3.0/bits/shared_ptr_base.h:1021
1021          { return static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get(); }
(gdb) 
std::__shared_ptr<SHOT::IMIPSolver, (__gnu_cxx::_Lock_policy)2>::get (this=0x7fffffffbcf0) at /usr/include/c++/9.3.0/bits/shared_ptr_base.h:1310
1310          { return _M_ptr; }
(gdb) 
std::__shared_ptr_access<SHOT::IMIPSolver, (__gnu_cxx::_Lock_policy)2, false, false>::_M_get (this=0x7fffffffbcf0) at /usr/include/c++/9.3.0/bits/shared_ptr_base.h:1021
1021          { return static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get(); }
(gdb) 
std::__shared_ptr_access<SHOT::IMIPSolver, (__gnu_cxx::_Lock_policy)2, false, false>::operator-> (this=0x7fffffffbcf0) at /usr/include/c++/9.3.0/bits/shared_ptr_base.h:1016
1016          }
(gdb) 
std::__shared_ptr_access<SHOT::Problem, (__gnu_cxx::_Lock_policy)2, false, false>::operator-> (this=0x7fffffffbd00) at /usr/include/c++/9.3.0/bits/shared_ptr_base.h:1015
1015        return _M_get();
(gdb) 
std::__shared_ptr_access<SHOT::Problem, (__gnu_cxx::_Lock_policy)2, false, false>::_M_get (this=0x7fffffffbd00) at /usr/include/c++/9.3.0/bits/shared_ptr_base.h:1021
1021          { return static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get(); }
(gdb) 
std::__shared_ptr<SHOT::Problem, (__gnu_cxx::_Lock_policy)2>::get (this=0x7fffffffbd00) at /usr/include/c++/9.3.0/bits/shared_ptr_base.h:1310
1310          { return _M_ptr; }
(gdb) 
std::__shared_ptr_access<SHOT::Problem, (__gnu_cxx::_Lock_policy)2, false, false>::_M_get (this=0x7fffffffbd00) at /usr/include/c++/9.3.0/bits/shared_ptr_base.h:1021
1021          { return static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get(); }
(gdb) 
std::__shared_ptr_access<SHOT::Problem, (__gnu_cxx::_Lock_policy)2, false, false>::operator-> (this=0x7fffffffbd00) at /usr/include/c++/9.3.0/bits/shared_ptr_base.h:1016
1016          }
(gdb) 
SHOT::TaskCreateDualProblem::createProblem (this=0x55555562a440, destination=..., sourceProblem=...) at TaskCreateDualProblem.cpp:107
107         destination->setDualAuxiliaryObjectiveVariableIndex(sourceProblem->properties.numberOfVariables);
(gdb) 
SHOT::MIPSolverCbc::setDualAuxiliaryObjectiveVariableIndex (this=0x55555567b9d0, index=15) at /home/stefan/work/gams/products/src/shot/src/MIPSolver/MIPSolverCbc.h:149
149         MIPSolverBase::setDualAuxiliaryObjectiveVariableIndex(index);
(gdb) l
144         return (MIPSolverBase::getDualAuxiliaryObjectiveVariableIndex());
145     }
146 
147     void setDualAuxiliaryObjectiveVariableIndex(int index) override
148     {
149         MIPSolverBase::setDualAuxiliaryObjectiveVariableIndex(index);
150     }
151 
152     std::string getConstraintIdentifier(E_HyperplaneSource source) override
153     {
(gdb) break 
Breakpoint 2 at 0x7ffff6a0af31: file /home/stefan/work/gams/products/src/shot/src/MIPSolver/MIPSolverCbc.h, line 149.
(gdb) step
SHOT::MIPSolverBase::setDualAuxiliaryObjectiveVariableIndex (this=0x55555567b9d8, index=15) at /home/stefan/work/gams/products/src/shot/src/MIPSolver/MIPSolverBase.h:105
105         dualAuxiliaryObjectiveVariableIndex = index;
(gdb) 
106         dualAuxiliaryObjectiveVariableDefined = true;
(gdb) 
107     };
(gdb) 
SHOT::MIPSolverCbc::setDualAuxiliaryObjectiveVariableIndex (this=0x55555567b9d0, index=15) at /home/stefan/work/gams/products/src/shot/src/MIPSolver/MIPSolverCbc.h:150
150     }
(gdb) 
SHOT::TaskCreateDualProblem::createProblem (this=0x55555562a440, destination=..., sourceProblem=...) at TaskCreateDualProblem.cpp:109
109         if(sourceProblem->objectiveFunction->properties.isMinimize)
(gdb) cont
Continuing.
 Dual problem created

╶ Problem instance ───────────────────────────────────────────────────────────────────────────────────────────────────╴

                                    Original             Reformulated

 Problem classification:            MIQCQP, nonconvex    MINLP, nonconvex

 Objective function direction:      minimize             minimize
 Objective function type:           quadratic, convex    quadratic but considered as nonlinear, convex

 Number of constraints:             18                   18
  - linear:                         12                   12
  - convex quadratic:               3                    0
  - nonconvex quadratic:            3                    0
  - convex nonlinear:               0                    3
  - nonconvex nonlinear:            0                    3

 Number of variables:               15                   15
  - real:                           12                   12
  - binary:                         3                    3
  - nonlinear:                      6                    6

╶ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────╴

 No options file specified.

 Nondefault options used:

  - Dual.ESH.InteriorPoint.CuttingPlane.IterationLimit = 50
  - Dual.HyperplaneCuts.ConstraintSelectionFactor = 1.0
  - Dual.HyperplaneCuts.UseIntegerCuts = true
  - Dual.MIP.NumberOfThreads = 1
  - Dual.MIP.Presolve.UpdateObtainedBounds = false
  - Dual.MIP.SolutionLimit.Initial = 2147483647
  - Dual.MIP.Solver = 2
  - Dual.Relaxation.Use = false
  - Dual.TreeStrategy = 0
  - Model.Reformulation.Constraint.PartitionNonlinearTerms = 1
  - Model.Reformulation.Constraint.PartitionQuadraticTerms = 0
  - Model.Reformulation.ObjectiveFunction.PartitionNonlinearTerms = 1
  - Model.Reformulation.ObjectiveFunction.PartitionQuadraticTerms = 0
  - Model.Reformulation.Quadratics.Strategy = 0
  - Output.Console.LogLevel = 1
  - Primal.FixedInteger.CallStrategy = 0
  - Primal.FixedInteger.OnlyUniqueIntegerCombinations = false
  - Primal.FixedInteger.Source = 0
  - Primal.Tolerance.TrustLinearConstraintValues = false
  - Subsolver.Ipopt.LinearSolver = 1
  - Termination.IterationLimit = 2147483647
  - Termination.ObjectiveGap.Absolute = 1e-10
  - Termination.ObjectiveGap.Relative = 0.1
  - Termination.TimeLimit = 1000.0

 Dual strategy:              Multi-tree
  - cut algorithm:           ESH
  - solver:                  Cbc 2.10

 Primal NLP solver:          Ipopt 3.13.1 with HSL MA27 linear solver

╶ Interior point search ──────────────────────────────────────────────────────────────────────────────────────────────╴

 Strategy selected:          cutting plane minimax
 Initializing NLP solver
 Cbc selected as MIP solver for minimax solver.
 Creating LP problem for minimax solver
 LP problem for minimax solver created
 Activating LP strategy
 Cutting plane minimax selected as NLP solver.
 Solving NLP problem.

    Iteration     │  Time  │    Cuts     │     Objective value     │  Objective diff.   
     #: type      │  tot.  │   + | tot.  │    problem | line srch  │    abs. | rel.    
╶─────────────────┴────────┴─────────────┴─────────────────────────┴──────────────────╴

     1: LP          228.55                     -1e+12 | -1e+12          inf. | inf.    
     2: LP          228.56     2 | 2             -550 | 755.127      1.3e+03 | 2.4e+00 
     3: LP          228.57     2 | 4             -550 | 254.386      8.0e+02 | 1.5e+00 
     4: LP          228.58     2 | 6          -307.27 | 204.461      5.1e+02 | 1.7e+00 
     5: LP          228.58     2 | 8         -100.909 | 127.407      2.3e+02 | 2.3e+00 

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff720695b in ClpSimplex::setColumnBounds(int, double, double) () from /home/stefan/work/gams/build/gms test/libshtcclib64.so
(gdb) bt
#0  0x00007ffff720695b in ClpSimplex::setColumnBounds(int, double, double) () from /home/stefan/work/gams/build/gms test/libshtcclib64.so
#1  0x00007ffff6a01a43 in SHOT::MIPSolverCbc::solveProblem (this=0x5555556a7940) at MIPSolverCbc.cpp:523
#2  0x00007ffff6bbec1c in SHOT::NLPSolverCuttingPlaneMinimax::solveProblemInstance (this=0x5555556dce60) at NLPSolverCuttingPlaneMinimax.cpp:159
#3  0x00007ffff6bbce3f in SHOT::NLPSolverBase::solveProblem (this=0x5555556dce60) at NLPSolverBase.cpp:20
#4  0x00007ffff6c11811 in SHOT::TaskFindInteriorPoint::run (this=0x555555660160) at TaskFindInteriorPoint.cpp:80
#5  0x00007ffff6bf11f9 in SHOT::SolutionStrategyMultiTree::solveProblem (this=0x55555567a9c0) at SolutionStrategyMultiTree.cpp:332
#6  0x00007ffff69bd464 in SHOT::Solver::solveProblem (this=0x7fffffffc800) at Solver.cpp:588
#7  0x00007ffff6ac61fe in shtCallSolver (Cptr=0x555555621b40) at EntryPointsGAMS.cpp:196
#8  0x00007ffff6ac67b2 in C__shtCallSolver (Cptr=0x555555621b40) at EntryPointsGAMS.cpp:247
#9  0x00007ffff78f8301 in GMSCONF_tgmsconf_DOT_sccallsolver (self=0x55555560d690, alg=75, psl=0x555555621b40, gmo=0x55555561cd30) at gmsconf.c:2443
#10 0x00007ffff78ece80 in libsolver (msg=0x7fffffffd140 "9Entry not found: shtHaveModifyProblem in libshtcclib64.so\377\377\377\177", 
    _2slvprefix=0x7fffffffcd40 "\003shtO0O0O0O0O0O0O0O0O0O0O0O0O0O0O0O0O0O0O0O0O0O   0", _2solvername=0x5555555f1820 <GENLINK_solver> "\004SHOT", _2gmo=0x7fffffffcb08, _2self=0x7fffffffcac8) at gevdoorg.c:3042
#11 0x00007ffff78ee4b6 in GEVDOORG_tgmsenvironment_DOT_gevcallsolver (self=0x55555560a260, gmoptr=0x55555561cd30, cntrfn=0x5555555c206f "", solvername=0x5555555f1820 <GENLINK_solver> "\004SHOT", solvelink=5, 
    logging=0, logfn=0x5555555c206f "", statfn=0x5555555c206f "", reslim=2.0000000000000001e+300, iterlim=2100000000, domlim=2100000000, optcr=2.0000000000000001e+300, optca=2.0000000000000001e+300, 
    jobhandle=0x5555555f17f8 <GENLINK_jobhandle>, msg=0x5555555f1b20 <GENLINK_msg> "4Could not create Gams Model Object with handle, msg=imulate requires solver executable17") at gevdoorg.c:3427
#12 0x00007ffff7889787 in gevcallsolver (pgev=0x55555560a260, gmoptr=0x55555561cd30, cntrfn=0x5555555c206f "", solvername=0x5555555f1820 <GENLINK_solver> "\004SHOT", solvelink=5, logging=0, 
    logfn=0x5555555c206f "", statfn=0x5555555c206f "", reslim=2.0000000000000001e+300, iterlim=2100000000, domlim=2100000000, optcr=2.0000000000000001e+300, optca=2.0000000000000001e+300, 
    jobhandle=0x5555555f17f8 <GENLINK_jobhandle>, msg=0x5555555f1b20 <GENLINK_msg> "4Could not create Gams Model Object with handle, msg=imulate requires solver executable17") at joatdclib.c:5854
#13 0x000055555556acea in GEVMDODEF_tgmsenvironment_DOT_gevcallsolver (self=0x555555607c30, gmoptr=0x55555561cd30, cntrfn=0x5555555c206f "", solvername=0x5555555f1820 <GENLINK_solver> "\004SHOT", solvelink=5, 
    logging=0, logfn=0x5555555c206f "", statfn=0x5555555c206f "", reslim=2.0000000000000001e+300, iterlim=2100000000, domlim=2100000000, optcr=2.0000000000000001e+300, optca=2.0000000000000001e+300, 
    jobhandle=0x5555555f17f8 <GENLINK_jobhandle>, msg=0x5555555f1b20 <GENLINK_msg> "4Could not create Gams Model Object with handle, msg=imulate requires solver executable17") at gevmdodef.c:848
#14 0x000055555555b62d in main (_Argc=3, _Argv=0x7fffffffe618) at genlink.c:293
(gdb) frame 1
#1  0x00007ffff6a01a43 in SHOT::MIPSolverCbc::solveProblem (this=0x5555556a7940) at MIPSolverCbc.cpp:523
523             osiInterface->setColBounds(getDualAuxiliaryObjectiveVariableIndex(), -1000000000.0, 1000000000.0);

So this is within find-interior-point. The MIPSolverCbc object is 0x5555556a7940 here, but it was 0x55555567b9d0 where the dualauxiliaryobjectivevariableindex was set.

Can this be helpful?

Just enabling Output.Debug.Enable=true doesn't work at the moment. Looks like I need to see how to set some output paths first. (Error when solving problem with GAMS: filesystem error: cannot make canonical path: Invalid argument [])

andreaslundell commented 4 years ago

Yes, now I understand where this happens, it is in the minmax solver and not in the main iteration (this was clear from the previous message you sent me as well, I just missed it).

svigerske commented 4 years ago

Here is the debug directory: fuel.zip

And the debug output: fuel.log

andreaslundell commented 4 years ago

Ok, i did a quick and dirty fix in https://github.com/coin-or/SHOT/tree/issue46 that should fix the problem.

Some comments

svigerske commented 4 years ago

Yes, that seems to work fine.

I don't get Cbc warnings with default settings. I can imagine these warnings come up only when writing out a file in Cbc.

andreaslundell commented 4 years ago

Yes, that is true. Cbc is a little bit picky with names (variables, constraints,...).