This is a follow up question to one I made previously about non-linear equations and ranged real numbers in Solver Foundation.
I acknowledge that where possible, rewriting a problem that is non-linear into linear could avoid some issues, however it is likely for various reasons this won’t be a viable option.
The requirements for the project I am involved with call for a set of constraints to be generated from a data source. The issue is the constraints could be a mix of linear or non-linear problems.
I have tried to come up with a set of example constraints and variables to test against that will hopefully give a clearer picture as to what I am trying to achieve. Does anyone know of a solver capable of handling a model of the kind to be generated by this combination of variables and constraints? We are currently using Solver foundation and have been trying various configurations and solver types.
Some parameters are created and have been bound to some arbitrary values:
P1 = 1 P2 = 2 P3 = 3
Some decisions with a domain specified as a finite range with a defined step value between each value in the range:
D1 (1..5) step of 0.1 //(e.g. 1, 1.1, 1.2 … 4.9, 5) D2 (1..5) step of 1 D3 (10..20) step of 0.1
The following example constraints simulate the kinds of constraints likely to be acquired from the data source. Next to each constraint is the expected result of running a solver with a model containing the one constraint, given the values of the above parameters and decision variables. Note that there is no concern with the quality of a solution, simply if there is a solution (feasible) or not (unfeasible).
C1: P1 = P2 * P3 (infeasible) C2: P3 = P1 + P2 (feasible) C3: D1 = P1 * P2 (feasible) C4: D3 = P1 * P2 (infeasible) C5: P1 = D1 * D2 (feasible) C6: P1 = D3 * D3 (infeasible) C7: D3 = D1 * D2 (feasible) C8: D2 = D3 * D3 (infeasible) C9: P3 = P2 / P1 (infeasible) C10: -P3 = P1 * D1 (infeasible)
Any pointers or advice would be most welcome :) moving from a UI background into an optimisation project has been character building to say the least.