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

📄 mfd.c

📁 多目标模糊决策法的C语言程序
💻 C
字号:
/*多目标模糊决策法的C语言程序*/

#include "stdio.h"
#include "conio.h"
#include "math.h"




/*分配内存空间函数*/
double * *mat_alloc(int nrows,int ncols)
{
   double * *mat;
   int i;
   mat = (double * *)malloc(sizeof(double *)*nrows);
   for(i=0;i<nrows;i++)
      {
       mat[i]=(double *)malloc(sizeof(double)*ncols);
      }
   return(mat);
}

main()
{
	double * *C,*A,*a,* *F,* *V,* *R,*B,*D,* *R1;
	double A_max,A_min,d,F_imax,F_imin,a_avg,V_jsum;
	
	float b;
	int L,M,N,p;
	
	int i,j,j_max,j_min;
	double max,min;
	
	/*输入专家人数L,评价方案个数M,因素个数N*/
	printf("input the number of experse:");
	scanf("%d",&L);
	printf("\n");
	
	printf("input the number of M:");
	scanf("%d",&M);
	printf("\n");
	
	printf("input the number of N:");
	scanf("%d",&N);
	printf("\n");
	
	/*输入专家给定的说评定矩阵C*/
	printf("input the matrix C:\n");
	
	C = mat_alloc(N,N);
	
	for(i=0;i<N;i++)
	 for(j=0;j<N;j++)
	 {
	 	scanf("%f",&b);
	 	C[i][j] = (double)b;
	 	}
	
	A = (double *)malloc(N*sizeof(double));
	a = (double *)malloc(N*sizeof(double));
	
	for(i=0;i<N;i++)
	{
		A[i] = 0;
		for(j=0;j<N;j++)
		{
			A[i] += C[i][j]; 
			}
		}
	A_max = A[0];
	A_min = A[0];
	for(i=1;i<N;i++)
	{
		if(A[i] > A_max) A_max = A[i];
		if(A[i] < A_min) A_min = A[i];	
		}
	
	d = (A_max - A_min)/1 - 0.1;
	
	for(i=1;i<N;i++)
	{
		a[i] = 0.1 + (A[i] - A_min)/d;
		}
	
	printf("output the matrix a:\n");
	
	for(i=0;i<N;i++)
	   printf("%6.3f",a[i]);
	   
	printf("\n");
	
	
	/*输入指标的权值A*/
	printf("input weight matrix a[N]:\n");
	a = (double *)malloc(N*sizeof(double));
	for(i=0;i<N;i++)
	{
		scanf("%f",&b);
	 	a[i] = (double)b;
		}
		
	/*输入P,*/
	printf("input p:");
	scanf("%d",&p);
	printf("\n");
	
	switch(p)
	{
		case 1:/*输入指标值矩阵F*/
			printf("input the matrix F:\n");
	
	    F = mat_alloc(N,M);
	
	    for(i=0;i<N;i++)
	     for(j=0;j<M;j++)
	     {
	 	     scanf("%f",&b);
	 	     F[i][j] = (double)b;
	 	     }
	 	     
	 	  printf("\n");
	 	  
	 	  /*计算相对偏差值矩阵*/
	 	  V = mat_alloc(N,M);
	 	  
	 	  B = (double *)malloc(M*sizeof(double));
	    
	    for(i=0;i<N;i++)
	    {
	    	F_imax = F[i][0];
	    	F_imin = F[i][0];
	    	
	    	for(j=1;j<M;j++)
	    	{
	    		if(F[i][j] > F_imax) F_imax = F[i][j];
		      if(F[i][j] < F_imin) F_imin = F[i][j];
	    		}
	    	B[i] = F_imin;
	    	for(j=0;j<M;j++)
	    	{
	    		V[i][j] = fabs(B[i] - F[i][j])/(F_imax - F_imin);
	    		}
	    	}
	    	
	    printf("output Vo:\n");
	    
	    for(i=0;i<N;i++)
	    {
	    	printf("%7.2f",B[i]);
	    	if(i%5 == 4) printf("\n");
	    	}
	    
	    /*输出矩阵相对偏差模糊矩阵V*/
	    getch();
	    
	    printf("output the matrix V:\n");
	    for(i=0;i<N;i++)
	    {
	    	for(j=0;j<M;j++)
	    	   printf("%9.2f",V[i][j]);
	    	printf("\n");
	    	}
	    printf("\n");
	    
	    getch();
	    
	    /*计算相对偏差距离*/
	    D = (double *)malloc(M*sizeof(double));
	    /*计算权值a的平均值*/
	    a_avg = 0;
	    for(i=0;i<N;i++)
	      a_avg += a[i];
	    a_avg /= N;
	    
	    for(j=0;j<M;j++)
	    {
	    	V_jsum = 0;
	    	for(i=0;i<N;i++)
	    	{
	    		V_jsum += pow((a[i]*V[i][j]),2);
	    		}
	    	D[j] = sqrt(V_jsum)/a_avg;
	    	}
	    
	    break;
	    
	    case 2:/*输入指标值矩阵F*/
	    	printf("input the matrix F:\n");
	
	      F = mat_alloc(N,M);
	
	      for(i=0;i<N;i++)
	       for(j=0;j<M;j++)
	       {
	 	       scanf("%f",&b);
	 	       F[i][j] = (double)b;
	 	       }
	 	     
	 	    printf("\n");
	    	
	    	printf("output the matrix F:\n");
	      for(i=0;i<N;i++)
	      {
	    	  for(j=0;j<M;j++)
	    	     printf("%7.2f",F[i][j]);
	    	  printf("\n");
	    	  }
	      printf("\n");
	      
	      getch();
	      
	      /*计算模糊评价矩阵R*/
	      R = mat_alloc(N,M);
	    
	      for(i=0;i<N;i++)
	      {
	    	  F_imax = F[i][0];
	    	  F_imin = F[i][0];
	    	
	    	  for(j=0;j<M;j++)
	    	  {
	    		  if(F[i][j] > F_imax) F_imax = F[i][j];
		        if(F[i][j] < F_imin) F_imin = F[i][j];
	    		  }
	    	  d = (F_imax - F_imin)/(1 - 0.1);
	    	  for(j=0;j<M;j++)
	    	  {
	    		  R[i][j] = 0.1 + (F_imax - F[i][j])/d;
	    		  }
	    	  }
	    	
	    	break; 
	    	
	    	case 3:/*输入定性指标评定模糊矩阵R*/
	    		printf("input the matrix R:\n");
	
	        R = mat_alloc(N,M);
	
	        for(i=0;i<N;i++)
	         for(j=0;j<M;j++)
	         {
	 	         scanf("%f",&b);
	 	         R[i][j] = (double)b;
	 	         }
	 	     
	 	      printf("\n");
	 	      
		}/*end switch*/
		
	if((p == 2)||(p == 3))
		{
			printf("output the matrix R:\n");
	    for(i=0;i<N;i++)
	      {
	    	  for(j=0;j<M;j++)
	    	     printf("%7.2f",R[i][j]);
	    	  printf("\n");
	    	  }
	    printf("\n");
	      
	    getch();
	    
	    R1 = mat_alloc(N,M);
	    
	    for(i=0;i<N;i++)
	     for(j=0;j<M;j++)
	       R1[i][j] = a[i]*R[i][j];
	       
	    printf("output the matrix R1:\n");
	    for(i=0;i<N;i++)
	      {
	    	  for(j=0;j<M;j++)
	    	     printf("%7.2f",R1[i][j]);
	    	  printf("\n");
	    	  }
	    printf("\n");
	      
	    getch();
	    
	    B = (double *)malloc(M*sizeof(double));
	    
	    for(j=0;j<M;j++)
	    {
	    	B[j] = 0;
	    	for(i=0;i<N;i++)
	    	{
	    		B[j] += R1[i][j];
	    		}
	    	}
	    	
	    printf("output B:\n");
	    
	    max = B[0];
	    j_max = 0;
	    for(j=0;j<M;j++)
	    {
	    	printf("%7.2f",B[j]);
	    	
	    	if(B[j] > max)
	    		{
	    			max = B[j];
	    			j_max = j;
	    			}
	    	}
	    
	    printf("\n");
	    printf("B the best project is %d project \n",j_max + 1);
	    getch();
			}/*end if*/
	
	else
		{
			/*输出D以及最优计划*/
			printf("output D[M]:\n");
	    
	    min = D[0];
	    j_min = 0;
	    for(j=0;j<M;j++)
	    {
	    	printf("%7.2f",D[j]);
	    	
	    	if(D[j] < min)
	    		{
	    			min = D[j];
	    			j_min = j;
	    			}
	    	}
	    
	    printf("\n");
	    printf("the best project is %d project \n",j_min + 1);
	    getch();
			}/*end else*/

	free(a);
	free(B);
	free(R);
	free(R1);
	
	free(F);
	free(D);	
	}/*end main*/








⌨️ 快捷键说明

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