How to define multiple constraints for fmincon?
30 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hi, I'm trying to minimize the formula below. I've done most of the code except I can't quite figure out how to account for the constraints. I tried at the end of the code but I think this is for nonlinear constraints? And mine are linear. Also not sure how to account for the bounds.
Anyone know how I can do this? Thanks!
%FORMULA: SC= 3SA + 4SS + 6LA + 4LS
%BOUNDS:
%SA>= 100 locks
%SS>=100 locks
%LA>=100 locks
%LS>=100 locks
%CONSTRAINTS:
%SA + LA = 2000
%SS + LS = 1500
%LA + LS <= 1500
%SA + SS <= 2500
%All variables need to be positive & integers
%load guesses into array
x0=[SA SS LA LS];
%call solver to minimize objective function given the constraint
xopt= fmincon(@objective, x0, [],[],[],[],[],[],@constraint,[])
%retrieve optimized shipping cost
SC_Opt=ship_cost(xopt)
%double check constraints
%function to calculate FendPac total shipping cost
function ship_cost= ship_cost(x)
SA= x(1);
SS= x(2);
LA = x(3);
LS = x(4);
ship_cost=3*SA + 4*SS + 6*LA + 4*LS;
end
%function to calculate shipped locks to Austin
function to_atx = to_atx(x)
SA= x(1);
LA= x(2);
to_atx= LA + SA
end
%function to calculate shipped locks to San Antonio
function to_satx = to_satx(x)
SS= x(1);
LS= x(2);
to_satx= LS + SS
end
%function to calculate shipped locks from Los Angeles
function from_LA = from_LA(x)
LS= x(1);
LA= x(2);
from_LA= LS + LA
end
%function to calculate shipped locks from San Francisco
function from_SF = from_SF(x)
SS= x(1);
SA= x(2);
from_SF= SS + SA
end
%objective function for optimization
function obj=objective(x)
obj=ship_cost(x);
end
%CONSTRAINTS
function [c,ceq]= constraint1(x)
c(1)= 2000- to_atx(x);
c(2)= 1500- to_satx(x);
c(3)=from_LA(x) - 1500;
c(4)= from_SF(x) - 2500
ceq1=[];
end
1 Commento
Walter Roberson
il 9 Feb 2021
function to_atx = to_atx(x)
SA= x(1);
LA= x(2);
to_atx= LA + SA
end
No, LA is x(3) not x(2) .
Risposte (1)
Walter Roberson
il 9 Feb 2021
Aeq = [1 0 1 0; 0 1 0 1];
beq = [2000; 2000];
A = [0 0 1 1; 1 1 0 0];
b = [1500; 2500]
lb = [100, 100, 100, 100];
ub = [1900, 1900, 1900, 1900]; %min 100, sum = 2000, so max = 1900
xopt = fmincon(@objective, x0, A, b, Aeq, beq, lb, ub)
0 Commenti
Vedere anche
Categorie
Scopri di più su Get Started with Optimization Toolbox in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!