Info
Diese Frage ist geschlossen. Öffnen Sie sie erneut, um sie zu bearbeiten oder zu beantworten.
where should i insert optimisation task
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
this is my code. my aim is to minimise the total cost, i want to do it using ga or pso option in optimisation task. the optimisation variable is the order quantity. please help.
%cost rates
P = 20
H = 0.1 *P
B = 10*P
E = P;
%demand vector
D = [21 37 1 16 8 5 10 18 20 27 21 35 11 44 2 34 21 28 8 10 41 49 16 35 44 45 5 2 9 44 5 22 48 27 35 16 35 42 1 38 50 38 15 40 6 23 46 15 15 7]
%shelf life
L = 4
% Initialize variables
T = length(D); % Number of days
I = zeros(1, T); % Inventory levels
order_qty = zeros(1, T); % Order quantities
Sexpired = zeros(1, T); % Expired quantities
A = zeros(1, T); % age of inventory
C = zeros(1,T); % backorder amount per day
in = zeros(1,T); % leftover inventory per day
max_inventory = 50;
% Initial conditions
I(1,1) = 10;
A(1,1) = 0;
% starting loop
for t = 1:T-1
% calculate leftover inventory
in(t) = max(0,(I(t)-D(t)));
if in(t) == 0
%order_qty(t) = max(0, max_inventory - I(t)); %order upto S
order_qty(t) = X; % wanting to assign value of optimised variable to order_qty for today
C(t) = abs(I(t)-D(t)); % counting backorders or shortage
A(t+1) = 1; % Reset age to 1 when new inventory arrives
I(t+1) = min(max_inventory, order_qty(t)); % inventory level for tomorow
else
% FIFO implementation
A(t+1) = A(t) + 1; % Increase age for existing items
A(t+1) = min(A(t+1), L); % Cap age to L
% Check for expired items
if A(t+1) >= L % if expired i.e age exceeds shelf life
Sexpired(t) = in(t); % count leftover inventory today as expired and discard
A(t+1) = 1; % Reset age to 1 for the newly ordered items tomorow
I(t+1) = min(max_inventory,order_qty(t)); % tomorow inventory will be only new arrival
end
end
end
% Calculate costs
holding_cost = sum(H .* I);
purchase_cost = sum(P .* order_qty);
expiry_cost = sum(E .* Sexpired);
shortage_cost = sum(B .* C);
% Calculate total cost outside the loop
total_cost = holding_cost + purchase_cost + expiry_cost + shortage_cost;
% Display costs
disp(['Holding Cost: ' num2str(holding_cost)]);
disp(['Purchase Cost: ' num2str(purchase_cost)]);
disp(['Expiry Cost: ' num2str(expiry_cost)]);
disp(['Shortage Cost: ' num2str(shortage_cost)]);
disp(['Total Cost: ' num2str(total_cost)]);
% Display quantity ordered each day
disp('Quantity Ordered Each Day:');
disp(order_qty);
disp(Sexpired);
This is the code of the optimisation task:
% Create optimization variables
X3 = optimvar("X","LowerBound",0,"UpperBound",50);
% Set initial starting point for the solver
initialPoint4.X = repmat(25,size(X3));
% Create problem
problem = optimproblem;
% Define problem objective
problem.Objective = sum(H * I + B * C + E * Sexpired + P * order_qty);
% Set nondefault solver options
options = optimoptions("ga","CreationFcn","gacreationlinearfeasible");
% Display problem information
show(problem);
% Clear variables
clearvars X3 initialPoint4 options
3 Kommentare
Antworten (0)
Diese Frage ist geschlossen.
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!