Creating optimization constraint with loop is too slow

8 ビュー (過去 30 日間)
Emmanouil
Emmanouil 2020 年 6 月 30 日
コメント済み: Alan Weiss 2023 年 1 月 25 日
I want to create optimization constraints using Problem-based Optimization in MATLAB.
I understand the vectorization is the proposed way to go as stated here https://www.mathworks.com/help/optim/ug/improve-formulation-or-solution.html
However, in many optimization problems, vectorization is not possible due to the problem nature, therefore loops are needed.
I have noticed that the loops involving optimization variables are too slow.
In the example below, a loop with 1000 iterations that includes a single optimization variable consumes around 7 seconds.
Is this the expected behaviour for generating optimization constraints over loops?
I understand that MATLAB is built on vectorization principles, however 7 seconds for a 1000 iteration loop is extremely slow.
% set
I = "i" + (1:1000)' ;
% positive continuous variable defined over set I
k = optimvar ( 'k' , I , 'LowerBound' , 0 ) ;
% Constraint with loop ~7s
tic
Constraint_test = optimconstr ( I ) ;
for i = 1 : length(I)
Constraint_test(i) = 2 * k(i) + 3 <= 10 ;
end
toc
% Constraint vectorized ~0.01s
tic
Constraint_test_vec = 2 * k + 3 <= 10 ;
toc

採用された回答

Matt J
Matt J 2020 年 6 月 30 日
編集済み: Matt J 2020 年 6 月 30 日
The problem-based framework is not built for speed. It's built to make setting up small problems easy. So, it's already questionable that you are using it for a problem with 1000 variables. In any case, you have chosen a strange indexing space for your optimvars. It would be better to do,
k = optimvar ( 'k' , [1000,1] , 'LowerBound' , 0 ) ;
tic;
Constraint_test =2*k+3<=10
toc %Elapsed time is 0.015064 seconds.
Even better, recognize that your constraint is equivalent to the simple upper bound k(i)<=3.5, and just do
k = optimvar ( 'k' , [1000,1] , 'LowerBound' , 0 ,'UpperBound',3.5) ;
  6 件のコメント
Matt J
Matt J 2023 年 1 月 25 日
@Unai Aldasoro Marcellan You would choose a solver appropriate to the form of your problem, see
and call it directly.
Alan Weiss
Alan Weiss 2023 年 1 月 25 日
Large scale problems can indeed be solved efficiently in the problem-based approach. See, for example, Plan Nuclear Fuel Disposal Using Multiobjective Optimization. I would not want to try to set up that problem using the solver-based approach.
There are several suggestions in the documentation for setting up problems efficiently. In particular, see Improve Problem-Based Organization and Performance. And using vectorized calls for creating objective and constraints is usually the most efficient, though the recent static analysis capabilities often do very well.
Alan Weiss
MATLAB mathematical toolbox documentation

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeProblem-Based Optimization Setup についてさらに検索

製品


リリース

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by