I received an unexpected wrong result that contradict the constraint condition when using optimproblem
3 views (last 30 days)
Show older comments
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
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.
Answers (0)
See Also
Categories
Find more on Surrogate Optimization in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!