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

1 Ansicht (letzte 30 Tage)
Mike
Mike am 22 Mär. 2023
Kommentiert: Stephen23 am 22 Mär. 2023
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 Kommentare
Mike
Mike am 22 Mär. 2023
It's a n*m double. It's content is only consisting of ones and twos.
Stephen23
Stephen23 am 22 Mär. 2023
"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"

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by