steelT.sa6b#

Warning

The original AMPL book does not reflect many of the latest features available in AMPL. To programmatically interact with your models you should use APIs such as our popular Python API.

steelT.sa6b

model steelT.mod;
data steelT.dat;

option solution_precision 10;
option solver_msg 0;

param avail3_lower default  0; param dual_lower;
param avail3_upper default 70; param dual_upper;
param other_bkpts default 0;

let avail[3] := avail3_lower;
solve; let dual_lower := time[3].dual;

let avail[3] := avail3_upper;
solve; let dual_upper := time[3].dual;

repeat {

   let avail[3] := (avail3_lower + avail3_upper) / 2;

   solve;

   if time[3].dual = dual_lower
      then let avail3_lower := avail[3];
      else if time[3].dual = dual_upper
         then let avail3_upper := avail[3];
         else {
            let other_bkpts := other_bkpts + 1;
            let avail3_lower := avail[3];
            let dual_lower := time[3].dual;
            };

   } until (avail3_upper - avail3_lower) / avail[3] < 0.0000001;

printf "Dual value %11.6f for avail[3] < %9.6f\n",
   dual_lower, avail3_lower;

printf "Dual value %11.6f for avail[3] > %9.6f\n",
   dual_upper, avail3_upper;

if other_bkpts > 0 then
   printf "Additional breakpoints detected: %2d\n", other_bkpts; ;