global variables Pattern Search
6 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Andrea Agosti
il 1 Apr 2020
Commentato: Andrea Agosti
il 1 Apr 2020
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?
Risposta accettata
Walter Roberson
il 1 Apr 2020
Modificato: Walter Roberson
il 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 Commenti
Walter Roberson
il 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.
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Genetic Algorithm in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!