⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 global.h

📁 多目标算法的DSP实现。可以直接在DSP平台上进行多目标优化
💻 H
字号:
// 定义一个全局的宏

# ifndef _GLOBAL_H_
# define _GLOBAL_H_

# define PI 3.14159265358979    // pi 的值
# define INF 1.0e14             // 无穷大
# define MIN 0.0                // 自变量的最小值
# define MAX 1.0                // 自变量的最大值
# define NX 6                   // 自变量的维数
# define NOBJ 2                 // 目标函数的个数
# define POPSIZE 10            // 群体规模
# define GEN 10               // 进化的代数
# define PC 0.9                 // 交叉概率
# define PM 0.1                 // 变异概率
# define MUC 20                 // 交叉分布指数
# define MUM 20                 // 变异分布指数
//# define NULL    ((void *)0)    // 空指针

// 个体
typedef struct
{
	double x[NX];               // 自变量
	double obj[NOBJ];           // 目标函数值(适应度)
	int rank;                   // 分布等级
	double crowd_dist;          // 拥挤距离
}
individual;

// 群体
typedef struct
{
	individual *ind;            // 个体指针
}
population;

// 双向链表
typedef struct list
{
	int index;                  // 索引号
	struct list *prior;         // 前向指针  
	struct list *next;          // 后向指针
}
list;

void randomize ();
void warmup_random (double seed);
void advance_random ();
double randomperc ();
int rand_integer (int low, int high);
double rand_real (double low, double high);

void initialize_pop (population *pop);
void initialize_ind (individual *ind);

void evaluate_pop (population *pop);
void evaluate_ind (individual *ind);
void evaluate_objective (double *x, double *obj);

void non_domination_sort_and_crowding_distance (population *new_pop);

//void insert (list *node, int index);
//list* del (list *node);

//int check_dominance (individual *a, individual *b);

//void crowding_distance_list (population *pop, list *lst, int front_size);
//void crowding_distance_index (population *pop, int c1, int c2);
//void crowding_distance (population *pop, int *obj_array, int front_size);

//void quicksort (population *pop, int *array, int obj_array_size);
//void q_sort (population *pop, int *array, int low, int high);

void selection (population *old_pop, population *new_pop);
individual* tournament (individual *ind1, individual *ind2);

void crossover (individual *parent1, individual *parent2, individual *child1, individual *child2);
void crossover_real (individual *parent1, individual *parent2, individual *child1, individual *child2);

void mutation_pop (population *pop);
void mutation_ind (individual *ind);
void mutate_ind_real (individual *ind);

void merge (population *pop1, population *pop2, population *pop3);
void copy_ind (individual *ind1, individual *ind2);

void non_domination_sort (population *mixed_pop, population *new_pop);
void crowding_sort_descend (population *mixed_pop, population *new_pop, int count, int front_size, list *elite);

# endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -