📄 crowding_distance.c
字号:
# include <stdio.h>
# include <math.h>
# include "malloc.h"
# include "global.h"
# include "sort.c"
// 计算拥挤距离
void crowding_distance (population *pop, int *obj_array, int front_size)
{
int i;
quicksort (pop, obj_array, front_size);
for (i=0; i<front_size; i++)
{
pop->ind[obj_array[i]].crowd_dist = 0.0;
}
pop->ind[obj_array[0]].crowd_dist = INF;
pop->ind[obj_array[front_size - 1]].crowd_dist = INF;
for (i=1; i<front_size - 1; i++)
{
pop->ind[obj_array[i]].crowd_dist = pop->ind[obj_array[i]].crowd_dist + (pop->ind[obj_array[i+1]].obj[0] - pop->ind[obj_array[i-1]].obj[0])/(pop->ind[obj_array[front_size-1]].obj[0] - pop->ind[obj_array[0]].obj[0]);
}
return;
}
// 计算拥挤距离(群体以链表的形式给出)void crowding_distance_list (population *pop, list *lst, int front_size){
int i; int *obj_array; if (front_size==1) { pop->ind[lst->index].crowd_dist = INF; return; } if (front_size==2) { pop->ind[lst->index].crowd_dist = INF; pop->ind[lst->next->index].crowd_dist = INF; return; } obj_array = (int *)malloc(front_size*sizeof(int));
for (i=0; i<front_size; i++)
{
obj_array[i] = lst->index;
lst =lst->next;
} crowding_distance (pop, obj_array, front_size); free (obj_array); return;}// 计算拥挤距离(群体以索引的形式给出)void crowding_distance_index (population *pop, int c1, int c2){
int i; int *obj_array; int front_size; front_size = c2-c1+1; if (front_size==1) { pop->ind[c1].crowd_dist = INF; return; } if (front_size==2) { pop->ind[c1].crowd_dist = INF; pop->ind[c2].crowd_dist = INF; return; } obj_array = (int *)malloc(front_size*sizeof(int));
for (i=0; i<front_size; i++)
{
obj_array[i] = i + c1;
} crowding_distance (pop, obj_array, front_size); free (obj_array); return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -