?? mfd.c
字號:
/*多目標模糊決策法的C語言程序*/
#include "stdio.h"
#include "conio.h"
#include "math.h"
/*分配內(nèi)存空間函數(shù)*/
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;
/*輸入專家人數(shù)L,評價方案個數(shù)M,因素個數(shù)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");
/*輸入指標的權(quán)值A(chǔ)*/
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));
/*計算權(quán)值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以及最優(yōu)計劃*/
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 + -