I received an unexpected wrong result that contradict the constraint condition when using optimproblem

4 ビュー (過去 30 日間)
function sol = optimize_crop_allocation(A_init, P, Q, C, D, U, V, M, N, S, B_1, B_2)
% P,Q 1x41
% C,D 1x41
% U,V 54x41
% M,N 54x41
% S 1x54
% B_1,B_2 54x41
prob = optimproblem('ObjectiveSense','maximize');
A = optimvar('A', 2, 54, 41, 'Type', 'continuous', 'LowerBound', double(0));
X=A(1);
Y=A(2);
phi_f=@(X) double(0.5*min(sum(X .* M)+sum(X .* M),sum(X .* M)+C)*P'-sum(sum(X.*U)));
f_expr=fcn2optimexpr(phi_f,X);
phi_g=@(Y) double(0.5*min(sum(Y .* N)+sum(Y .* N),D+sum(Y .* N))*Q'-sum(sum(Y.*V)));
g_expr=fcn2optimexpr(phi_g,Y);
prob.Objective = f_expr+g_expr;
prob.Constraints.cons1 = sum(A(1), 2) <= S'; % the output fails to satisfy this condition
prob.Constraints.cons2 = sum(A(2), 2) <= S'; % and this
A0.A=double(A_init);
sol = solve(prob,A0);
disp(sol);
end
thanks for your help
  9 件のコメント
Torsten
Torsten 2024 年 9 月 7 日
編集済み: Torsten 2024 年 9 月 7 日
As @idris said: you should experiment first with numerical matrices what you get by your summation and indexing operations. E.g. I can't believe that you want to set these constraints:
prob.Constraints.cons1 = sum(A(1), 2) <= S'; % the output fails to satisfy this condition
prob.Constraints.cons2 = sum(A(2), 2) <= S'; % and this
A(1) and A(2) are scalar values like 4 and 5. So why would it be necessary to sum over them ?
Also setting
X=A(1);
Y=A(2);
is obscure. Maybe you mean
X=A(1,:,:);
Y=A(2,:,:);
I don't know.
昀泽
昀泽 2024 年 9 月 17 日
Now it’s fine) the optimizer works not so well, I think, due to the non-differentiable object function min) I’ve tried other methods)

サインインしてコメントする。

回答 (0 件)

カテゴリ

Help Center および File ExchangeMathematics についてさらに検索

製品


リリース

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by