I am using SNOPT 7.5 (Matlab and Apple computer) to solve an optimization problem with one non-linear (the objective function) and 6 linear constraints. However I've noticed that in the output file (.out) there is written "6 non linear constraints" and "one linear constraint", so exactly the opposite of what I expect to read. Is it maybe just a misspell in the .out file ?
Also I noticed a strange behavior when providing some partial derivatives. If the constant derivatives (linear constraints) are provided in the userfunction then the optimization problem is solved correctly, while if I provide the constant derivatives outside the userfuction ( so that the linear part is defined just once) then the optimization problem is not solved.
Therefore, it seems to me that SNOPT really interprets my constraints as non linear...
I can understand that it would be difficult to see where the problem is without looking deeply into the written code. However, I hope someone can give me few hints.
More information:
The constant derivatives have been checked using option "derivative level 3". I am not providing the objective derivatives (use NaN to let SNOPT evaluate it)
I already checked that the declared pattern of the linear part (iAfun,jAvar) is correct and that the A matrix is not overlapping with the G matrix.
Hi Eric, If you define a linear constraint in the function routine and not via the (A, iAfun, jAvar) data structure, then SNOPT will interpret the constraint as being nonlinear. The one linear row listed in the output is a dummy constraint inserted by SNOPT to ensure that the internal format of the problem is so-called "standard form". (See the second paragraph "4." of page 36 of the SNOPT Users' Guide http://ccom.ucsd.edu/~optimizers/papers/snopt7.pdf).
We recommend that linear constraints always be defined separately from nonlinear constraints. SNOPT satisfies the linear constraints before solving problem. Once the linear constraints are feasible, they remain feasible in all subsequent iterations. Nonlinear constraints are only satisfied in the limit. I hope this helps explain the output. Cheers, --Philip
Dear Dott. Gill, thank you for the swift reply .
The structure of the program is quite big. Would it be better if I send only the userfunction and the script which calls the latter? Also, where should I send it?
I am using SNOPT 7.5 student version for Matlab for Mac OSX 64 bits (thus the compiled file snoptmex.mexmaci64).
--
You received this message because you are subscribed to the Google Groups "SNOPT" group.
To unsubscribe from this group and stop receiving emails from it, send an email to snopt+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.