2012-09-09 2 views
0

Mon programme Matlab a plusieurs entrées comme struct (in.a, in.b, etc.) et sorties multiples (out.a, out.b, etc.)algorithme génétique Matlab entrée solveur complexe et sortie

Je voudrais utiliser la solutionneur d'algorithme génétique de la boîte à outils d'optimisation pour trouver la meilleure entrée in.a, tandis que toutes les autres entrées sont constantes. La forme physique est l'une des sorties, par ex. out.b(2,3).

Comment "dire" cela au solveur?

Merci Daniel

Répondre

2

Il n'est pas rare dans la programmation d'avoir une situation où ce qui est plus pratique pour votre fonction et ce que certains attend d'appel de la bibliothèque de celui-ci ne sont pas d'accord. La résolution normale à un tel problème est d'écrire une petite couche entre les deux qui permet aux deux de parler; une interface .

De help ga:

X = GA (FITNESSFCN, NVARS) trouve un minimum sans contrainte locale X à l'aide de FITNESSFCN GA. [...] FITNESSFCN accepte un vecteur X de taille 1 par NVARS et renvoie un scalaire évalué à X.

Ainsi, ga attend une entrée de vecteur, sortie scalaire, alors que vous avez une structure en cours et dehors. Vous devez écrire la fonction suivante (sous):

function Y = wrapper_Objfun(X, in) 
    in.a = X; %# variable being optimized 
    out = YOUR_REAL_FUNCTION(in); %# call to your actual function 
    Y = out.b(2,3); %# objective value 
end 

puis l'appel à ga ressemblera

X = ga(@(x) wrapper_Objfun(x,in), N); 

N est cependant grand in.a devrait être.

Lisez également à ce sujet dans Matlab's own documentation on the subject.

+0

C'est ce que j'ai fini par faire, j'espérais un tour de magie:/ – Daniel

+0

merci pour la réponse géniale et le lien génial! –

Questions connexes