Closed adowling2 closed 7 years ago
Your observation about LAPACK and IPOPT is correct. However, whether you compile SCIP with IPOPT support is independent to SCIP.jl. Our instructions do not use IPOPT, but you can, by setting IPOPT=TRUE
in the make
call. SCIP.jl should work just the same.
Whether or not this has anything to do with your solution candidate, I can not tell. I know that we (in SCIP.jl) do not yet support incomplete initial solutions, where only values for some of the variables are given. But in your example, some solution is apparently set, and tested.
@leethargo Thank you for the quick reply.
I compiled with IPOPT=true
.
Looking closer at the output
[nonlinear] <nonlin_obj>: (1 * <_var0_>)-1<_var4_>[C] <= 0;
violation: right hand side is violated by 5 (scaled: 5)
all 1 solutions given by solution candidate storage are infeasible
from my example, I noticed the variables go from var0 to var4. However, there are only 4 variables in the example. You mentioned that SCIP.jl does not support incomplete solution candidates. Is it possible that SCIP.jl is adding an extra dummy variable which happens to be uninitialized?
I think the (lack of support for) incomplete solution candidates is not the issue.
If I look at the violated constraint, it looks like this constraint is created automatically (together with the variable _var4_
during the process of transforming the nonlinear constraints for SCIP. Unfortunately, the auxiliary variable _var4_
will apparently take the value 0
for the solution candidate, which is infeasible.
So, this is a bug in either SCIP.jl or CSIP.
Sorry, this does not look like an easy fix.
yes, somehow, we need to evaluate the objective function at the point given and then assign the extra variable to that value
Summary: When I use SCIP.jl to pass a MINLP JuMP model to SCIP, the solve complains the initial point is infeasible. When I use AmplNLWriter to send the same model to SCIP, it correctly classifies the initial point as feasible.
Example:
Using SCIP.jl:
Using AmplNLWriter:
Perhaps this is a red herring, but notice the warning message about LAPACK eigenvalue computation with SCIP.jl. Including Ipopt is supposed to provide an interface to LAPACK. Using the AMPL executable for SCIP, we see that Ipopt is included as an external code and the warning message is absent.
Edit x2: Using @NLobjective instead of @objective results in the same behavior.