2017-10-14 8 views
1

Je veux paralléliser un algorithme de décomposition pour l'optimisation nommé Hedging progressif. Cette optimisation est stockée sur une fonction nommée PH qui reçoit des arguments pour le modèle, certains arguments sont matriciels mais PH n'a besoin que d'un vecteur de cette matrice de cette façon.Julia 0.6 fonction pmap

for s = 1:nS 
    res = PH(k,s,data,Lines,Ag,Gx,Pmax[:,s],Prmax[:,s],COpe[:,s]) 
    push!(data,res) 
end 

Alors PH n'a besoin que d'un vecteur de Pmax, Prmax et COpe.

Pour paraléliser j'essaye de faire ceci.

pmap(s -> PH(k,s,data,Lines,Ag,Gx,Pmax[:,s],Prmax[:,s],COpe[:,]),1:nS) 

Mais je reçois ceci:

The applicable method may be too new: running in world age 21846, while current world is 21965. 

J'utilise Julia 0.6 peut-être la façon dont je suis la programmation est d'une version plus ancienne.

Une idée?

+0

Essayez de regarder: https://docs.julialang.org/fr/stable/manual/methods/#Redefining-Methods- 1 – Liso

+0

Vous n'avez pas donné suffisamment de code pour reproduire le problème. Les problèmes d'âge mondiaux sont dus à la définition des fonctions avec eval. Je suppose que vous devez faire cela dans 'PH' mais nous n'avons aucune idée de la façon dont vous avez défini' PH'. –

Répondre

0

J'ai récemment eu un problème similaire avec pmap() dans 0.6. Essayez d'attribuer l'argument f dans pmap(f,c...) à une fonction concrète, à savoir,

createPH(s) = PH(k,s,data,Lines,Ag,Gx,Pmax[:,s],Prmax[:,s],COpe[:,]) 
pmap(createPH,1:nS) 

Ce résolu le problème pour moi. (Notez également que dans 0.6.0 un avertissement est généré, et non une erreur world age)