Can you help me debug this code?
    5 ビュー (過去 30 日間)
  
       古いコメントを表示
    
% Define parameter values
Cost = [3 4; 5 6; 2 5];
ProdCost = [1 2; 4 3; 2 3];
TransCost = [8 10 5; 12 7 9; 11 9 15];
HoldCost = [3 2 4];
RawReq = [1200 1500; 800 1300; 1500 2000];
ProdCap = [1500 2000; 2000 1800; 1800 2500];
WareCap = [1000; 1500; 1000];
WareDemand = [500 600 900; 600 800 1400; 1100 1100 1200];
OrderCost = [10000 10000; 8000 8500; 6500 5000];
% Create optimization model
model = optimproblem('ObjectiveSense', 'minimize');
% Define decision variables
x = optimvar('x', 2, 3, 'LowerBound', 0, 'Type', 'integer');
y = optimvar('y', 3, 2, 'LowerBound', 0, 'Type', 'integer');
z = optimvar('z', 3, 3, 'LowerBound', 0, 'Type', 'integer');
q = optimvar('q', 3, 3, 'LowerBound', 0, 'Type', 'integer');
O = optimvar('O', 2, 3, 'LowerBound', 0, 'UpperBound', 1, 'Type', 'integer');
% Define objective function
obj = sum(sum(Cost .* x)) + sum(sum(ProdCost .* y)) + sum(sum(TransCost .* z)) + ...
      sum(HoldCost .* (sum(y, 2) / 2)) + sum(sum(OrderCost .* O));
% Add objective function to the model
model.Objective = obj;
% Define constraints
cons1 = sum(sum(z .* RawReq)) <= x;
cons2 = sum(z, 2) <= ProdCap;
cons3 = sum(z, 1) <= WareCap';
cons4 = sum(q, 2) == WareDemand;
cons5 = y - z == 0;
% Add constraints to the model
model.Constraints.cons1 = cons1;
model.Constraints.cons2 = cons2;
model.Constraints.cons3 = cons3;
model.Constraints.cons4 = cons4;
model.Constraints.cons5 = cons5;
% Solve the optimization problem
[solution, fval, exitflag, output] = solve(model);
% Display results
disp("Optimal Solution:");
disp("Total Cost: " + fval);
disp("Raw Material Purchase Plan:");
disp(solution.x);
% Display more results as needed
% ...
% Sensitivity/Scenario Analysis (Nested Function)
function sensitivityAnalysis()
    fprintf("Sensitivity Analysis:\n");
    % Varying transportation costs by +/- 10%
    transport_cost_variation = [0.9 1.1];  % Vary costs by 10%
    for factor = transport_cost_variation
        TransCost_variation = TransCost * factor;
        % Update the objective function with the new transportation costs
        obj_variation = sum(sum(Cost .* x)) + ...
                        sum(sum(ProdCost .* y)) + ...
                        sum(sum(TransCost_variation .* z)) + ...
                        sum(HoldCost .* (sum(y, 2) / 2)) + ...
                        sum(sum(OrderCost .* O));
        model.Objective = obj_variation;
        % Solve the optimization problem
        [~, fval_variation] = solve(model);
        fprintf("Transportation Cost Variation Factor: %.2f\n", factor);
        fprintf("Total Cost: %.2f\n", fval_variation);
        % Display more results or analysis as needed
    end
end
% Monte Carlo Simulation (Nested Function)
function monteCarloSimulation()
    fprintf("Monte Carlo Simulation:\n");
    % Simulate parameter variations for a single scenario
    num_simulations = 1000;
    simulation_costs = zeros(num_simulations, 1);
    for i = 1:num_simulations
        % Generate random variations for transportation costs
        random_cost_variation = 0.9 + 0.2 * rand();  % Random variation between 0.9 and 1.1
        TransCost_variation = TransCost * random_cost_variation;
        % Update the objective function with the new transportation costs
        obj_variation = sum(sum(Cost .* x)) + ...
                        sum(sum(ProdCost .* y)) + ...
                        sum(sum(TransCost_variation .* z)) + ...
                        sum(HoldCost .* (sum(y, 2) / 2)) + ...
                        sum(sum(OrderCost .* O));
        model.Objective = obj_variation;
        % Solve the optimization problem
        [~, fval_variation] = solve(model);
        % Store total cost of simulation
        simulation_costs(i) = fval_variation;
    end
    % Calculate mean and standard deviation of simulation costs
    mean_cost = mean(simulation_costs);
    std_deviation = std(simulation_costs);
    fprintf("Mean Total Cost: %.2f\n", mean_cost);
    fprintf("Standard Deviation: %.2f\n", std_deviation);
    % Display more insights or analysis as needed
end
% Call sensitivity analysis and Monte Carlo simulation functions
sensitivityAnalysis();
monteCarloSimulation();
% ...
end
0 件のコメント
回答 (2 件)
  Dinesh
    
 2023 年 9 月 1 日
        Hey Lou Simon.
Is there a specific problem that you are facing while trying to debug this file?
If you generally want to know how to debug a file or if you are new to debugging code in MATLAB, the following link can help you:
0 件のコメント
  lazymatlab
      
 2023 年 9 月 1 日
        1. If you intended to make sensitivityAnalysis and monteCarloSimulation to be nested functions, the overall code should be also a function. This is what 'nested' means. Just adding something like below at line 1 will do:
function function_name
2. There are a lot of size mismatches in your code. The operator .* is for element-wise multiplication which implies that two operands are at the same size. If you are trying to matrix multiplication, use * instead of .*.
0 件のコメント
参考
カテゴリ
				Help Center および File Exchange で Direct Search についてさらに検索
			
	製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


