tuiliji/GenAlogrithm/GeneticAlgorithm.h

209 lines
4.1 KiB
C
Raw Permalink Normal View History

#ifndef GENETICALGORITHM_H
#define GENETICALGORITHM_H
#pragma once
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <ctime>
#include <cstdlib>
#include<map>
#include"datadef.h"
#include <string>
class GeneticAlgorithm {
public:
GeneticAlgorithm(std::map<std::string, int> redLst, std::map<std::string, int> blueLst,\
std::map<std::string, ABILITY*>& flst,std::map<std::string, ABILITY*>& slst,\
std::map<std::string, ABILITY*>& alst,std::map<std::string, ABILITY*>& glst);
void init();
void run();
private:
// <20>췽װ<ECB7BD><D7B0>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int mkj500;
int mj16d;
int mj20;
int mwg2;
int mgj11;
int mh6k;
int mj11;
int myg9;
int mwuzhen10;
int mkj2000;
// <20>췽װ<ECB7BD><D7B0>Ҫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD>ɱ<EFBFBD>
double ckj500;
double cj16d;
double cj20;
double cwg2;
double cgj11;
double ch6k;
double cj11;
double cyg9;
double cwuzhen10;
double ckj2000;
//----------------------------------------------------------------------//
// <20><><EFBFBD><EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>Ҫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ֵ
// ̽<><CCBD>
double kj500DA;
double kj2000DA;
double wuzhen10DA;
double hangmuDA;
double taiwanDA;
double ribenDA;
double hanguoDA;
double alibokeDA;
// <20><><EFBFBD><EFBFBD>
double j16dDA;
double j20DA;
double gj2DA;
double gj11DA;
double h6kDA;
double j11DA;
double yg9DA;
double f15DA;
double ea18gDA;
double gaopaoDA;
double zhihuisuoDA;
double agzDA;
double tiangongDA;
// <20><><EFBFBD><EFBFBD>
double j20AA;
double j11AA;
double gj11AA;
double gj2AA;
double h6kAA;
double f15AA;
double taiwanAA;
double ribenAA;
double hanguoAA;
double alibokeAA;
double hangmuAA;
double agzAA;
double tiangongAA;
double gaopaoAA;
// <20><><EFBFBD><EFBFBD>
double kj500AA;
double kj2000AA;
double wuzhen10AA;
double ea18gAA;
double yg9AA;
double j16dAA;
double zhihuisuoAA;
// <20><><EFBFBD><EFBFBD>
double j16dIA;
double yg9IA;
double ea18gIA;
double hangmuIA;
double alibokeIA;
double hanguoIA;
double ribenIA;
double taiwanIA;
// <20><><EFBFBD><EFBFBD>
double kj500IA;
double kj2000IA;
double j20IA;
double gj2IA;
double gj11IA;
double h6kIA;
double j11IA;
double wuzhen10IA;
double f15IA;
double agzIA;
double tiangongIA;
double zhihuisuoIA;
double gaopaoIA;
// <20><><EFBFBD><EFBFBD>
double kj500SA;
double kj2000SA;
double j16dSA;
double j20SA;
double gj2SA;
double gj11SA;
double h6kSA;
double j11SA;
double wuzhen10SA;
double yg9SA;
double f15SA;
double taiwanSA;
double ribenSA;
double hanguoSA;
double alibokeSA;
double hangmuSA;
double agzSA;
double tiangongSA;
double zhihuisuoSA;
double ea18gSA;
double gaopaoSA;
//----------------------------------------------------------------------//
// <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>Ҫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
int hm;
int agz;
int f15;
int zhihuisuo;
int tiangong;
int taiwan;
int riben;
int hanguo;
int aliboke;
int ea18g;
int zhuangjiache;
int tank;
int gaopao;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>,<2C><><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><E2B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><EFBFBD><E2B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double wurenjiFactor;
double yourenjiFactor;
double shipFactor;
double zhihuisuoFactor;
double fighterdectectFactor;
double lanfangdetectFactor;
public:
struct Individual {
int kj500, j16d, j20, wg2, gj11, h6k, j11, yg9, wuzhen10,kj2000;
double fitness;
Individual() : kj500(0), j16d(0), j20(0), wg2(0), gj11(0), h6k(0), j11(0), yg9(0), wuzhen10(0), kj2000(0), fitness(0.0) {}
void calculateFitness(GeneticAlgorithm* ga);
};
private:
// <20><><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
struct AbilityFactor {
double DetectFactor;
double AttackFactor;
double InterfereFactor;
double SurFactor;
};
std::vector<AbilityFactor> Factor;
// <20>Ŵ<EFBFBD><C5B4><EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int populationSize;
int generations;
double mutationRate;
int tournamentSize;
double logDef(double num);
double calculateEfficiency(int kj500, int j16d, int j20, int wg2, int gj11, int h6k, int j11, int yg9, int wuzhen10, int kj2000);
void initializePopulation(std::vector<Individual>& population, int hm, int ali, int tw, int hg, int rb, int zhihuisuo, int f15, int agz ,int tg,int gaopao);
Individual tournamentSelection(const std::vector<Individual>& population);
Individual crossover(const Individual& parent1, const Individual& parent2);
void mutate(Individual& individual);
};
#endif // GENETICALGORITHM_H