MATLAB Answers


Why I get the minus result for linear optimization?

Asked by Edward Xu on 14 Sep 2018
Latest activity Edited by Alan Weiss
on 14 Sep 2018
I am trying to solve a linear optimization problem, and I have followed the steps of the guide in MATLAB website. And I get the minus result. I am pretty sure the max is 36000.
linearOptim = optimproblem('ObjectiveSense','maximize');
product_1 = optimvar('product_1', 'Type', 'integer', 'LowerBound', 0);
product_2 = optimvar('product_2', 'Type', 'integer', 'LowerBound', 0);
linearOptim.Objective = 3000 * product_1 + 5000 * product_2;
linearOptim.Constraints.econs1 = product_1 <= 4;
linearOptim.Constraints.econs2 = 2 * product_2 <= 12;
linearOptim.Constraints.econs3 = 3 * product_1 + 2 * product_2 <= 18;
solveLinearOptim = solve(linearOptim);


Show 1 older comment
Got it. Thank you. But I think it’s better if the software can express the output value based on the exact input objective function, or just tell the user the reason, isn’t it?
But how to tell the software that you wanted to maximize instead of minimize ?
Torsten, the new problem based optimization permits that. Notice Edward included
linearOptim = optimproblem('ObjectiveSense','maximize');
I think it would be quite reasonable for the optimizer to get the sign right in such a case, but it does not appear to do so.

Sign in to comment.

1 Answer

Answer by Alan Weiss
on 14 Sep 2018
Edited by Alan Weiss
on 14 Sep 2018

You are seeing the underlying solver's intermediate calculations. But if you look at the returned function value, you get the correct answer. For example,
ans =
Or even more simply, in the function call itself:
[solveLinearOptim,fval] = solve(linearOptim)
LP: Optimal objective value is -36000.000000. % This is the confusing bit
solveLinearOptim =
struct with fields:
product_1: 2.0000
product_2: 6
fval =
36000 % This is the correct answer
Alan Weiss
MATLAB mathematical toolbox documentation


Sign in to comment.