How can I dynamically add optimization variables for me problem in a loop?

조회 수: 1 (최근 30일)
Mike
Mike 2023년 3월 22일
댓글: Stephen23 2023년 3월 22일
Hey :)
I have defined an optimization problem as follows:
prob = optimproblem;
Now I wanna add optimization variables in a loop, such as
for i = 1:10
x = optimvar('Test', 'LowerBound', 0);
end
where within the first iteration, the name of the variable should be x_1, in the second iteration it should be x_2 and so on.
I tried something like this, but it didn`t work:
['x_' int2str(i)] = optimvar(ans, 'LowerBound',0);
My next approach was defining a struct for the variables like the following:
for i = 1:10
ans = mat2str(this_is_a_test(i,:));
ans = regexprep(ans, '\[(.*)\]', '$1');
ans = strrep(ans,' ','');
ans = strcat('Test_', ans);
var = ans;
variables(.var) = optimvar(ans, 'LowerBound',0);
end
After obtaining the struct with my optimization variables, I cannot "transfer" it into prob.Variables
I would be extremely glad if someone could help me with this :)
If you need more information, don't hesitate to ask.
Best regards,
Mike
  댓글 수: 8
Mike
Mike 2023년 3월 22일
It's a n*m double. It's content is only consisting of ones and twos.
Stephen23
Stephen23 2023년 3월 22일
"It's a n*m double. It's content is only consisting of ones and twos."
this_is_a_test = randi(1:2,10,3)
this_is_a_test = 10×3
2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 2 1 2 2 1 1 1 2 1 1 2 2
var_names = [];
for i = 1:10
ans = mat2str(this_is_a_test(i,:));
ans = regexprep(ans, '\[(.*)\]', '$1');
ans = strrep(ans,' ','');
ans = strcat('Test_', ans);
var_names = [var_names; ans];
end
V0 = string(var_names)
V0 = 10×1 string array
"Test_211" "Test_122" "Test_211" "Test_121" "Test_222" "Test_111" "Test_212" "Test_211" "Test_121" "Test_122"
Here is a simpler approach to generate those names:
V1 = "Test_"+join(string(this_is_a_test),"")
V1 = 10×1 string array
"Test_211" "Test_122" "Test_211" "Test_121" "Test_222" "Test_111" "Test_212" "Test_211" "Test_121" "Test_122"

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Solver Outputs and Iterative Display에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by