209 lines
4.1 KiB
C
209 lines
4.1 KiB
C
![]() |
#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
|