linprog
10 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Dear all, I am dealing with linprog function and have some difficulties with it. The function I need to optimize is: f=1.44-0.05x-0.04y, subject to x>=0, y>=0, y>= -x +10, y<=-x+12 , y<=(1/3)x.
Where do I include the constant value from the objective function 1.44?
Thanks a lot.
Nina
1 comentario
Dimpal
el 3 de Abr. de 2025
% Define the objective function coefficients (excluding the constant)
f_coeffs = [-0.05, -0.04];
% Define the inequality constraints (A*x <= b)
A = [1, 1; % y <= -x + 12 => x + y <= 12
-1, -1; % y >= -x + 10 => -x - y <= -10
-1, 3]; % y <= (1/3)x => -x + 3y <= 0
b = [12, -10, 0];
% Define the lower bounds for x and y (x >= 0, y >= 0)
lb = [0, 0];
% Solve the linear programming problem
[x, fval] = linprog(f_coeffs, A, b, [], [], lb);
% Calculate the actual objective function value (including the constant)
f_actual = 1.44 + fval;
% Display the results
fprintf('Optimal solution:\n');
fprintf('x = %.4f\n', x(1));
fprintf('y = %.4f\n', x(2));
fprintf('Objective function value = %.4f\n', f_actual);
% Plotting the feasible region and optimal solution
% 1. Define the line for the constraints
x_plot = 0:15; % Set the range for x
y1 = -x_plot + 12;
y2 = -x_plot + 10;
y3 = (1/3) * x_plot;
% 2. Plot the lines
figure;
plot(x_plot, y1, 'r-', 'DisplayName', 'y <= -x + 12');
hold on;
plot(x_plot, y2, 'b-', 'DisplayName', 'y >= -x + 10');
plot(x_plot, y3, 'g-', 'DisplayName', 'y <= (1/3)x');
% 3. Fill the feasible region
x_fill = [0, 6, 12, 10,0];
y_fill = [0, 2, 0, 0, 10];
fill(x_fill,y_fill,'y','FaceAlpha',0.3,'DisplayName','Feasible Region');
% 4. Plot the optimal point
plot(x(1), x(2), 'ko', 'MarkerSize', 8, 'MarkerFaceColor', 'k', 'DisplayName', 'Optimal Point');
% 5. Add labels and legend
xlabel('x');
ylabel('y');
title('Feasible Region and Optimal Solution');
legend('show');
grid on;
axis([0, 15, 0, 15]); % Adjust axis limits as needed
hold off;
Respuestas (3)
Andrei Bobrov
el 13 de Sept. de 2011
Removed first variant (17:20 MDT[09:20 EDT])
Hi Nina! Adjustment for the right answer (ADD 13.09.2011 14:20 MDT [06:20EDT])
f = [ 0.05; 0.04];
A = [-1 -1; 1 1];
b = [-10; 12;];
Aeq = [-1/3 1];
beq = 0;
lb = [0; 0;];
[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb)
ADD2 13.09.2011 (14:25 MDT [06:25EDT])
f = [ 0.05; 0.04;];
A = [-1 -1 ; 1 1 ; -1/3 1];
b = [-10; 12; 0];
lb = [0; 0;];
[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb)
1 comentario
Aurele Turnes
el 13 de Nov. de 2017
Editada: Aurele Turnes
el 13 de Nov. de 2017
If you have R2017b, you can use the new problem-base approach. It will take care of the constant value for you: https://www.mathworks.com/help/optim/problem-based-lp-milp.html
0 comentarios
John D'Errico
el 3 de Abr. de 2025
Editada: John D'Errico
el 3 de Abr. de 2025
Think about it. Do you need that constant at all? (NO.)
LINPROG finds a location (in your case, in terms of x and y) that minimizes an objective. Does adding a constant change the location of that minimum? Of course not. Adding any constant to the objective is irrelevant to the location of the minimum. As such, don't worry about the constant. LINPROG does not care.
This is a common idea in any optimization problem. In terms of a constraint, yes, a constant term matters. But the objective can be arbitrarily shifted by any constant. If it bothers you that the final function value returned does not have that constant in it, then add it in at the end. And, finally, IF you really, really, desperately need that constant in there, use of a problem based solution will allow that.
0 comentarios
Ver también
Categorías
Más información sobre Solver Outputs and Iterative Display en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!