📄 mfd.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 + -