Arbitrarily large numbers like 1e6 often introduce numerical instability, and that is why you are seeing conditionally optimal. But your formulation also does not quite match your problem description. If I understand correctly, the following does what you want: var Flow {<i,j> in ARCS} >= 0 <= Upper[i,j]; var Flow_Fixed {ARCS} Binary; min obj = sum {<i,j> in ARCS} (_cost_[i,j] * Flow[i,j] + FIXED_COST[i,j]*Flow_Fixed[i,j]); con balance {i in NODES}: sum {<(i),j> in ARCS} Flow[i,j] - sum {<j,(i)> in ARCS} Flow[j,i] <= _sd_; * don't need to take all supply; con Upper_Flow {<i,j> in ARCS}: Flow[i,j] <= Flow[i,j].ub * Flow_Fixed[i,j]; Con Con_Binary {<i,j> in ARCS}: Flow[i,j] >= FIXED_QTY[i,j] * Flow_Fixed[i,j]; * Flow has to be at least FIXED_QTY[i,j] (or nothing); The resulting optimal solution has Flow[s1,d1] = 52, Flow[s2,d2] = 20, and Flow[s3,d3] = 23, for a total cost of 254. Note that you do not need Lower or _capac_ because you don't use them anywhere. See also this related doc example that models fixed charges in a similar way: SAS/OR(R) 14.1 User's Guide: Mathematical Programming Finally, you might also be interested in this book of examples, especially Depot Location (Distribution 2) and Car Rental 2: SAS/OR(R) 14.1 User's Guide: Mathematical Programming Examples
... View more