Minimization with linear contrainsts

I tried to get the minimum value of the objective function z=3*x1, but the result I got was z=45, x1=15 which I believe that are the value of maximum. Could someone help me out with the code?
Thank you in advance!
x = optimvar('x',1,'lowerbound',0);
prob = optimproblem('Objective',3*x(1),'ObjectiveSense','min');
cons1 = -5*x(1) <= -20; %Constraint 1: -5x1 <= -20
cons2 = -2*x(1) <= -30; %Constraint 2: -2x1 <= -30
cons3 = -x(1) <= -6; %Constraint 3: -x1 <= -6
cons4 = -3*x(1) <= -24; %Constraint 4: -3x1 <= -24
%Now set the cons# as the constraints of the optimization problem
prob.Constraints.cons1 = cons1;
prob.Constraints.cons2 = cons2;
prob.Constraints.cons3 = cons3;
prob.Constraints.cons4 = cons4;
problem = prob2struct(prob);
show(prob)
[sol,fval,exitflag,output] = linprog(problem)

 Risposta accettata

cons2 = -2*x(1) <= -30; %Constraint 2: -2x1 <= -30
Divide by the -2 and adjust the sense of the test appropriately to see that is equivalent to x1 >= 15, which is the value actually used. So it did return the minimum given those constraints.

8 Commenti

Thank you for your response!
Below is the question and the result that I got from the code
Looks ok. All of the constraints must hold simultaneously so if x1 must be at least 15 according to the second constraint then it must be at least 15 and so 3*x1 must be at least 45, which is the solution you got.
Thank you so much!
I did another way by using the graphical method. But I got the difference answer by using the above code. Could you please help me out with it?
I cannot read the image showing the alternative method. I certainly cannot get matlab to execute images.
April
April il 20 Feb 2021
Modificato: Walter Roberson il 20 Feb 2021
Here is the code. Sorry about that!
x=0:20;
y1= max((-20 - 0*x)/-5,0); %Let y1 = -5x1, y1 <= 20
y2= max((-30-0*x)/-2,0); %Let y2 = -2x1, y2 <=30
y3= max((-6-0*x)/-1,0); %Let y3 = -x1, y3 <=6
y4= max((-24-0*x)/-3,0); %Let y4 = x2, y4 <= 8
ytop=min([y1;y2;y3;y4]);
area(x,ytop)
hold on;
[v,u] = meshgrid(0:0.5:20,0:0.5:20);
Z= 3*u ;
contour(v,u,Z,'r','ShowText','on'); % 'r' =red color, 'ShowText','on' = show value of Z
hold off;
title('Problem 5') %Title of the graph is "Problem 5"
xlabel('x2') %The x-axis label is "x2"
ylabel('x1') %The y-axis label is "x1"
legend('Feasible region','Value of Z') %Legend is "Feasible region" for the shaded region,
%"Value of Z" is the lines
x=0:20;
y1= max((-20 - 0*x)/-5,0); %Let y1 = -5x1, y1 <= 20
min(y1), max(y1)
ans = 4
ans = 4
y2= max((-30-0*x)/-2,0); %Let y2 = -2x1, y2 <=30
min(y2), max(y2)
ans = 15
ans = 15
y3= max((-6-0*x)/-1,0); %Let y3 = -x1, y3 <=6
min(y3), max(y3)
ans = 6
ans = 6
y4= max((-24-0*x)/-3,0); %Let y4 = x2, y4 <= 8
min(y4), max(y4)
ans = 8
ans = 8
Notice those are all constants, because in each case you have 0*x so you are ignoring the x.
ytop=min([y1;y2;y3;y4]);
That will of course be the 4
area(x,ytop)
hold on;
[v,u] = meshgrid(0:0.5:20,0:0.5:20);
Z= 3*u ;
contour(v,u,Z,'r','ShowText','on'); % 'r' =red color, 'ShowText','on' = show value of Z
hold off;
title('Problem 5') %Title of the graph is "Problem 5"
xlabel('x2') %The x-axis label is "x2"
ylabel('x1') %The y-axis label is "x1"
legend('Feasible region','Value of Z') %Legend is "Feasible region" for the shaded region,
%"Value of Z" is the lines
I don't know what you think you are calculating there.
%Constraint 1: 5x1 >= 20
%Constraint 2: 2x1 >= 30
%Constraint 3: x1 >= 6
%Constraint 4: 3x1 >= 24
x1 = linspace(0,20);
c1 = 5*x1 >= 20;
c2 = 2*x1 >= 30;
c3 = 1*x1 >= 6;
c4 = 3*x1 >= 24;
overall = c1 & c2 & c3 & c4;
bad = find(~overall);
good = find(overall);
fill(x1([bad(1), bad(end), bad(end), bad(1)]), [0 0 1 1], 'r');
hold on
fill(x1([good(1), good(end), good(end), good(1)]), [0 0 1 1], 'g');
hold off
Thank you so much!

Accedi per commentare.

Più risposte (0)

Categorie

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by