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

4 views (last 30 days)
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 Comments
Torsten
Torsten on 7 Sep 2024
Edited: Torsten on 7 Sep 2024
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.
昀泽
昀泽 on 17 Sep 2024
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)

Sign in to comment.

Answers (0)

Categories

Find more on Mathematics in Help Center and File Exchange

Products


Release

R2024a

Community Treasure Hunt

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

Start Hunting!