📄 petrolslave.c
字号:
#include <stdlib.h>#include <pvm3.h>#include "petrol.h"char *appName;static void SendMessage(int tid, int message);static void GetIndividuals(Individual **pop, int *howmany, int *location);static void SendIndividualsFitness(Individual *pop, int *howmany, int *location, int parent);static void Cleanup(Individual **pop, int howmany);void main(int argc, char **argv) { int parent, howmany, location, n; Individual *pop; strcreate(&appName, argv[0]); parent = pvm_parent(); while (TRUE) { pvm_recv(parent, PETROL_WORK); SendMessage(parent, PETROL_WORK_REQUEST); pvm_recv(parent, PETROL_WORK_INDIVIDUALS); GetIndividuals(&pop, &howmany, &location); for (n = 0; n < howmany; n++) { (pop + n)->fitness = Fitness(pop + n); } SendIndividualsFitness(pop, &howmany, &location, parent); Cleanup(&pop, howmany); }}void SendMessage(int tid, int message) { pvm_initsend(PvmDataDefault); pvm_send(tid, message);}void GetIndividuals(Individual **pop, int *howmany, int *location) { int n; Individual *i; pvm_upkint(location, 1, 1); pvm_upkint(howmany, 1, 1); *pop = (Individual *)malloc(sizeof(Individual) * (*howmany)); for (n = 0; n < *howmany; n++) { i = *pop + n; pvm_upkint(&(i->chromLen), 1, 1); i->chrom = (int *)malloc(sizeof(int) * i->chromLen); pvm_upkint(i->chrom, i->chromLen, 1); }}void SendIndividualsFitness(Individual *pop, int *howmany, int *location, int parent) { int n; Individual *i; pvm_initsend(PvmDataDefault); pvm_pkint(location, 1, 1); pvm_pkint(howmany, 1, 1); for (n = 0; n < *howmany; n++) { i = pop + n; pvm_pkdouble(&(i->fitness), 1, 1); } pvm_send(parent, PETROL_WORK_DONE);}void Cleanup(Individual **pop, int howmany) { int n; Individual *i; for (n = 0; n < howmany; n++) { i = *pop + n; free(i->chrom); } free(*pop);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -