Originally posted by: EdKlotz
>
> First of all, thank you very much for looking at my problem in so much detail!
>
> 1) I want to use Cplex/Matlab. I still haven't found the scaling parameter control in this API.
MATLAB allows you to set every CPLEX parameter. Specifics depend on whether
you are using the toolbox functions or the object oriented CPLEX Class API.
If the latter, look at the description of the Param property in the docs for
setting arbitrary parameters. Based on that, if you had an instance of the
Cplex Class called cpx, you would set scaling to 1 with
cpx.Param.read.scale.Cur = 1;
More generally, look up the parameter of interest in the parameter reference
manual, then note that the MATLAB convention for parameter naming uses the
same identifier as interactive CPLEX, with a '.' between each word.
If you are using the toolbox functions, the naming convention also resembles
interactive CPLEX, but within the framework of the cplexoptimset function.
As the manual describes, you would do something like
opt = cplexoptimset('cplex');
opt.read.scale=1;
< other non default parameter settings >
then pass opt to the optimization toolkit function you call.
>
> 2) this constraint is sort of necessary. I purposely set the right hand side so large that the constraint will never be binding. Later, on sensitivity runs, I will reduce it and observe the effect on the objective. I did reduce it by several orders of magnitude without it becoming binding, improving the conditioning.
OK, but you can accomplish this in other ways that don't create the numerical
trouble. So, let's say the maximum right hand side that can make this constraint
binding is b. You take your original constraint
ax <= b
and making it nonbinding by increasing the right hand side;
ax <= b + M
Now, b + M is very large, and has the potential to create numerical troubles,
particularly when presolve is disabled. But, instead, you could make it non
binding by reformulating by introducing a slack variable and adjusting the
slack bounds
ax + s <= b
-infinity <= s <= +infinity
When you want to enforce this constraint, change the upper and lower bounds on
s to 0. This would work better numerically.
>
> 3) I have not considered watching which variables cplex attacks first and trying your approach of creating constraints with them. Given that there are 2 problems here (the first was about numerical accuracy with mps files and the other is how to solve efficiently), I can't be sure that the solution you saw is a proper one. I do have a large difference in the magnitude of some of my coefficients (fixed costs for building a manufacturing plant vs. unit costs to produce products). I will have to think about this and experiment.
Given your model description, in terms of MIP performance you probably want
to give higher priority to the decision variables associated with paying the
fixed cost to build a particular plant. After all, until you decide which
plants to build and know their production capabilities, deciding which products
to produce doesn't make much sense. On the LP side, it sounds like you can't
optimize over just the largest coefficients and constrain the resulting objective at its optimal value, but you might be able to constrain it within
some modest percentage of optimality. That too would enable you to use the goal
programming approach.
>
> Thanks again!
#CPLEXOptimizers#DecisionOptimization