MATLAB Answers

global variables Pattern Search

7 views (last 30 days)
Hi!
i'm using Pattern Search with a custom output function that at the end each iteration is updating a global variable. Is it true that if i'm activating the parallelisation of the PS i cannot use global variables?

  2 Comments

Rik
Rik on 1 Apr 2020
Based on your previous question I think this doc page could help you find a solution.

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 1 Apr 2020
Edited: Walter Roberson on 1 Apr 2020
No, that is not true. You can use global variables with parallelisation.
However, the initial value of the global variables will not be transferred to the workers, and the workers do not share the global variable with each other -- you cannot use global to communicate between the workers. Also, the value of the global variables will not be copied back from the workers to the client.
In order to initialize or retrieve the global variables, you end up needing to use parfevalOnAll.
global variables are global to their process, but are not shared between processes.
If you just need to initialize something on all workers and the value does not need to be changed, then consider using https://www.mathworks.com/help/parallel-computing/parallel.pool.constant.html

  3 Comments

Andrea Agosti
Andrea Agosti on 1 Apr 2020
Thank for your answer.
From your answer I basically understand that global variables can be used but it is not a good idea. Also, in my case i would need to change the value of the global variable between iterations of pattern search, which cannot be done.
Walter Roberson
Walter Roberson on 1 Apr 2020
If changing the global variables is for output only (keeping a record of intermediate values for example) then you can still do that, and use parfevalOnAll to retrieve the results afterwards. You might possibly want to tag each result with the loop control variable value, or with the lab ID, if you need to unwrap into linear order like you would get on a single process.
If changing the global variables is for the purpose of changing the search while the search is still running, then you would be violating the principle in most minimization algorithms that when if you were to run with the same parameters again, that you would get the same result (yes, this does mean that you shouldn't be using randomness unless you are controlling the random seed.) This is mathematically required for patternsearch and fmincon, but is not required for ga() or gamultiobj() -- but remember that reporting the resulting parameter vector is meaningless if those parameters no longer give the same output.
Andrea Agosti
Andrea Agosti on 1 Apr 2020
very clear! Many thanks

Sign in to comment.

More Answers (0)