This example demonstrates the use of the NLP solver to solve the following highly nonlinear optimization problem, which appears in Hock and Schittkowski (1981):
The initial point used is . You can call the NLP solver within PROC OPTMODEL to solve the problem by writing the following SAS statements:
proc optmodel; var x{1..8} >= 0.1 <= 10; min f = 0.4*(x[1]/x[7])^0.67 + 0.4*(x[2]/x[8])^0.67 + 10 - x[1] - x[2]; con c1: 1 - 0.0588*x[5]*x[7] - 0.1*x[1] >= 0; con c2: 1 - 0.0588*x[6]*x[8] - 0.1*x[1] - 0.1*x[2] >= 0; con c3: 1 - 4*x[3]/x[5] - 2/(x[3]^0.71*x[5]) - 0.0588*x[7]/x[3]^1.3 >= 0; con c4: 1 - 4*x[4]/x[6] - 2/(x[4]^0.71*x[6]) - 0.0588*x[8]/x[4]^1.3 >= 0; con c5: 0.1 <= f <= 4.2; /* starting point */ x[1] = 6; x[2] = 3; x[3] = 0.4; x[4] = 0.2; x[5] = 6; x[6] = 6; x[7] = 1; x[8] = 0.5; solve with nlp / algorithm=activeset; print x; quit;
The summaries and the solution are shown in Output 8.1.1.
Output 8.1.1: Summaries and the Optimal Solution
Problem Summary | |
---|---|
Objective Sense | Minimization |
Objective Function | f |
Objective Type | Nonlinear |
Number of Variables | 8 |
Bounded Above | 0 |
Bounded Below | 0 |
Bounded Below and Above | 8 |
Free | 0 |
Fixed | 0 |
Number of Constraints | 5 |
Linear LE (<=) | 0 |
Linear EQ (=) | 0 |
Linear GE (>=) | 0 |
Linear Range | 0 |
Nonlinear LE (<=) | 0 |
Nonlinear EQ (=) | 0 |
Nonlinear GE (>=) | 4 |
Nonlinear Range | 1 |
Performance Information | |
---|---|
Execution Mode | Single-Machine |
Number of Threads | 4 |
Solution Summary | |
---|---|
Solver | NLP |
Algorithm | Active Set |
Objective Function | f |
Solution Status | Optimal |
Objective Value | 3.9511634753 |
Optimality Error | 1.691012E-9 |
Infeasibility | 7.8982136E-9 |
Iterations | 23 |
Presolve Time | 0.00 |
Solution Time | 0.08 |
[1] | x |
---|---|
1 | 6.46511 |
2 | 2.23271 |
3 | 0.66740 |
4 | 0.59576 |
5 | 5.93268 |
6 | 5.52723 |
7 | 1.01332 |
8 | 0.40067 |