フィルターのクリア

Error in prob.Objective

3 ビュー (過去 30 日間)
Angga Fernando
Angga Fernando 2021 年 8 月 24 日
回答済み: prabhat kumar sharma 2024 年 5 月 2 日
Dear All,
I tried to solve optimization problem with objective to minimize the result (cost), the code is below :
% Source Data
InvCost = [700 600 650 800 400]';
Cap = [750 750 750 750 750]';
DelCost = [3 0 5 6 8 5 5; 4 4 5 5 7 0 3; 5 7 3 5 7 4 0; 5 6 0 6 7 3 2; 6 6 6 0 2 5 6];
Demand = [500 400 150 350 300 400 200];
% Create Objective
prob = optimproblem('ObjectiveSense','minimize');
X1 = optimvar('X1',5,1,'Type','integer','LowerBound',0,'UpperBound',1);
X2 = optimvar('X2',5,7,'Type','integer','LowerBound',0,'UpperBound',[]);
cost = (InvCost'*X1)+(DelCost'*X2);
prob.Objective = cost;
% Create Constraints - Demand
ConsDemand = sum(X2)==Demand;
prob.Constraints.ConsDemand = ConsDemand;
% Create Constraints - Capacity
ConsCap = sum(X2)-(Cap'*X1);
prob.Constraints.ConsCap = ConsCap;
% Create Solution
[sol,fval] = solve(prob);
When tried to run the code, I got error message on "prob.Objective = cost " that
"Objective must be a scalar OptimizationExpression or a struct containing a scalar OptimizationExpression."
Attached pic below :
Anyone here can help me, how to solve this issue ? Is the code I have written correct or not?
Thank you for your kindly help.

回答 (1 件)

prabhat kumar sharma
prabhat kumar sharma 2024 年 5 月 2 日
Hi Angga,
I understand that you are facing this error in your objective function.
I tried to analyze your objective function, that is defined as:
cost = (InvCost'*X1) + (DelCost'*X2);
Here, InvCost is a column vector (5x1), and X1 is a matrix (5x1) of optimization variables. Their product, InvCost'*X1, is a scalar, which is correct.
However, DelCost is a matrix (5x7), and X2 is also a matrix (5x7) of optimization variables. Their product, DelCost'*X2, will result in a matrix (5x7), not a scalar, which is the source of the error.
To correct the error, you need to ensure that the entire expression for cost results in a scalar. For the delivery cost part, you want to sum all elements of the product of DelCost and X2 to get a total delivery cost. This can be achieved by element-wise multiplication followed by summing all elements.
Here's how you can correct it:
% Corrected Objective Function
cost = sum(InvCost'*X1) + sum(sum(DelCost.*X2));
I hope it helps to resolve your error!

カテゴリ

Help Center および File ExchangeSolver Outputs and Iterative Display についてさらに検索

タグ

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by