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

📄 crowding_distance.c

📁 多目标算法的DSP实现。可以直接在DSP平台上进行多目标优化
💻 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 + -