CPM
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
[[卒論]]
内容:ファジィ・ランダム変数の等価変換に必要なパラメータの...
(入力データ)
1.各工程の最小日数、最大日数(標準日数)と平均日数
2.各工程の最小費用(標準費用)、最大費用とその平均費用
3.属性数(晴れ/雨/雪)
4.従事者数
(出力データ)
1.日数tに関するファジィ・ランダム変数のメンバシップ関数の...
2.費用勾配cに関するファジィ・ランダム変数のメンバシップ関...
3.費用切片bに関するファジィ・ランダム変数のメンバシップ関...
#include<stdio.h>
#include<math.h>
#include<limits.h>
#include"../../hdr/random.h"
#include"../../hdr/util_okuhara.h"
#ifdef _Cdecl
#define drand() ((double)(rand() + 1) / 0x7fff - 0.5)
#else
#define drand() ((double)(rand() + 1) / 0x7fffffff - 0.5)
#endif
#define SEED 32767
#define STR_MAX 256
#define Proc_MAX 105 //最大作業工程数
#define Worker_MAX 105 //最大作業者数
#define Attri_MAX 5
#define ITE_MAX 105 //最大繰り返し回数
struct particle{
int process; //作業工程
int attribute; //属性
int period;
int reward;
};
static unsigned long seed = 1; /* 任意 */
int flag, Num_Proc, Num_Worker, Num_Attri;
double Ave_Proc[Proc_MAX], Var_Proc[Proc_MAX];
double Ave_Cost[Proc_MAX], Var_Cost[Proc_MAX];
double Std_Day[Proc_MAX], Std_Cost[Proc_MAX];
/*******************************************************...
/*******************************************************...
void Load_Data()
{
int i;
FILE *fp_out;
char fname[STR_MAX];
sprintf( fname, "../../out_dat/CPM.csv" );
fp_out = save_file( fname );
fclose(fp_out);
printf("乱数は一様(0)、正規(1)\n");
scanf("%d", &flag);
printf("作業工程数を入力\n");
scanf("%d", &Num_Proc);
printf("作業従事者数を入力\n");
scanf("%d", &Num_Worker);
printf("属性数を入力\n");
scanf("%d", &Num_Attri);
if( flag == 0 ){
for( i = 1; i <= Num_Proc; i++ ){
printf("作業工程%dの最小を入力\n", i);
scanf("%lf", &Ave_Proc[i]);
printf("作業工程%dの最大を入力(標準作業時間)\n", i);
scanf("%lf", &Var_Proc[i]);
}
for( i = 1; i <= Num_Proc; i++ ){
printf("作業賃金%dの最小を入力(標準費用)\n", i);
scanf("%lf", &Ave_Cost[i]);
printf("作業賃金%dの最大を入力\n", i);
scanf("%lf", &Var_Cost[i]);
}
for( i = 1; i <= Num_Proc; i++ ){
Std_Day[i] = Ave_Proc[i] + 3.*sqrt(Var_Proc[i]);
Std_Cost[i] = Ave_Cost[i] - 3.*sqrt(Var_Cost[i]);
}
}
if( flag == 1 ){
for( i = 1; i <= Num_Proc; i++ ){
printf("作業工程%dの平均を入力\n", i);
scanf("%lf", &Ave_Proc[i]);
printf("作業工程%dの分散を入力(標準作業時間:mean+2sig...
scanf("%lf", &Var_Proc[i]);
}
for( i = 1; i <= Num_Proc; i++ ){
printf("作業賃金%dの平均を入力(標準費用::mean-2sigma...
scanf("%lf", &Ave_Cost[i]);
printf("作業賃金%dの分散を入力\n", i);
scanf("%lf", &Var_Cost[i]);
}
for( i = 1; i <= Num_Proc; i++ ){
Std_Day[i] = Var_Proc[i];
Std_Cost[i] = Ave_Cost[i];
}
}
}
/*******************************************************...
/*******************************************************...
void Fuzzy_Data()
{
int i, j, k;
int wor, pro, att, per, rew;
int count[Worker_MAX][Proc_MAX][Attri_MAX];
double Fuzzy_L[Worker_MAX][Proc_MAX][Attri_MAX];
double Fuzzy_R[Worker_MAX][Proc_MAX][Attri_MAX];
double Fuzzy_C[Worker_MAX][Proc_MAX][Attri_MAX];
double trend, seppen;
double Fuzzy_CL[Worker_MAX][Proc_MAX][Attri_MAX];
double Fuzzy_CR[Worker_MAX][Proc_MAX][Attri_MAX];
double Fuzzy_CC[Worker_MAX][Proc_MAX][Attri_MAX];
double Fuzzy_BL[Worker_MAX][Proc_MAX][Attri_MAX];
double Fuzzy_BR[Worker_MAX][Proc_MAX][Attri_MAX];
double Fuzzy_BC[Worker_MAX][Proc_MAX][Attri_MAX];
FILE *fp_in, *fp_out;
char fname[STR_MAX];
if( flag == 0 )
sprintf( fname, "../../out_dat/CPM.csv" );
fp_in = load_file( fname );
if ( fp_in == NULL ){
printf ( "Cant open file !\n" );
exit(0);
}
for( i = 1; i <= Num_Worker; i++ ){
for( j = 1; j <= Num_Proc; j++ ){
for( k = 1; k <= Num_Attri; k++ ){
Fuzzy_L[i][j][k] = 10000.;
Fuzzy_R[i][j][k] = -10000.;
Fuzzy_C[i][j][k] = 0.;
Fuzzy_CL[i][j][k] = 10000.;
Fuzzy_CR[i][j][k] = -10000.;
Fuzzy_CC[i][j][k] = 0.;
Fuzzy_BL[i][j][k] = 10000.;
Fuzzy_BR[i][j][k] = -10000.;
Fuzzy_BC[i][j][k] = 0.;
count[i][j][k] = 0;
}
}
}
while( fscanf( fp_in, "%d %d %d %d %d", &wor, &pro, &att...
count[wor][pro][att] ++;
// 作業日数のファジィ
if( per < Fuzzy_L[wor][pro][att] )
Fuzzy_L[wor][pro][att] = per;
if( per > Fuzzy_R[wor][pro][att] )
Fuzzy_R[wor][pro][att] = per;
Fuzzy_C[wor][pro][att] += per;
// 費用効果の傾きのファジィ
trend = (double)(rew-Std_Cost[pro])/(double)(per-Std_Da...
printf("%lf(%d,%d,%d)\n", trend, wor, pro, att);
if( trend < Fuzzy_CL[wor][pro][att] )
Fuzzy_CL[wor][pro][att] = trend;
if( trend > Fuzzy_CR[wor][pro][att] )
Fuzzy_CR[wor][pro][att] = trend;
Fuzzy_CC[wor][pro][att] += trend;
// 費用効果の切片のファジィ
seppen = Std_Cost[pro] - trend*Std_Day[pro];
if( seppen < Fuzzy_BL[wor][pro][att] )
Fuzzy_BL[wor][pro][att] = seppen;
if( seppen > Fuzzy_BR[wor][pro][att] )
Fuzzy_BR[wor][pro][att] = seppen;
Fuzzy_BC[wor][pro][att] += seppen;
}
fclose( fp_in );
for( i = 1; i <= Num_Worker; i++ ){
for( j = 1; j <= Num_Proc; j++ ){
for( k = 1; k <= Num_Attri; k++ ){
Fuzzy_C[i][j][k] /= (double)(count[i][j][k]);
Fuzzy_CC[i][j][k] /= (double)(count[i][j][k]);
Fuzzy_BC[i][j][k] /= (double)(count[i][j][k]);
}
}
}
sprintf( fname, "../../out_dat/CPM_Fuzzy_period.csv" );
fp_out = save_file( fname );
for( i = 1; i <= Num_Worker; i++ ){
for( j = 1; j <= Num_Proc; j++ ){
for( k = 1; k <= Num_Attri; k++ ){
fprintf( fp_out, "%d\t %d\t %d\t %lf\t %lf\t %lf\n",
i, j, k, Fuzzy_L[i][j][k], Fuzzy_C[i][j][k], F...
}
}
}
fclose(fp_out);
sprintf( fname, "../../out_dat/CPM_Fuzzy_cost-period.csv...
fp_out = save_file( fname );
for( i = 1; i <= Num_Worker; i++ ){
for( j = 1; j <= Num_Proc; j++ ){
for( k = 1; k <= Num_Attri; k++ ){
fprintf( fp_out, "%d\t %d\t %d\t %lf\t %lf\t %lf\t %l...
i, j, k, Fuzzy_CL[i][j][k], Fuzzy_CC[i][j][k],...
Fuzzy_BL[i][j][k], Fuzzy_BC[i][j][k], Fuzzy_BR...
}
}
}
fclose(fp_out);
}
/*******************************************************...
/*******************************************************...
void Save_Data(struct particle personal[], int i)
{
FILE *fp_out;
char fname[STR_MAX];
sprintf( fname, "../../out_dat/CPM.csv" );
fp_out = save_add_file( fname );
fprintf( fp_out, "%d\t %d\t %d\t %d\t %d\n",
i, personal[i].process, personal[i].attrib...
personal[i].period, personal[i].reward );
fclose(fp_out);
}
/*******************************************************...
/*******************************************************...
//実数乱数
double frand(void)
{
double result;
while((result=(double)rand()/RAND_MAX)>=1);
return result;
}
/*******************************************************...
/*******************************************************...
int main(int argc, char **argv)
{
int i, j, k, l, total_data;
struct particle personal[Worker_MAX]; //作業者ごとの活...
srand(SEED); //乱数の初期化
Load_Data();
for( i = 1; i <= Num_Worker; i++ ){
for( j = 1; j <= ITE_MAX; j++ ){
if( frand() < 0.9 ){
k = Random(1, Num_Proc);
personal[i].process = k;
personal[i].attribute = Random(1, Num_Attri);
if( flag == 0 ){
personal[i].period = Random( Ave_Proc[k], Var_Proc[k...
personal[i].reward = Random( Ave_Cost[k], Var_Cost[k...
}
if( flag == 1 ){
personal[i].period = (int)(rand_normal( Ave_Proc[k],...
personal[i].reward = (int)(rand_normal( Ave_Cost[k],...
}
if( ( (personal[i].period < Std_Day[k]) && (personal[...
|| ( (personal[i].period == Std_Day[k]) && (person...
Save_Data(personal, i);
}
}
}
}
Fuzzy_Data();
printf("Finish! \n");
getchar();
getchar();
return(0);
}
終了行:
[[卒論]]
内容:ファジィ・ランダム変数の等価変換に必要なパラメータの...
(入力データ)
1.各工程の最小日数、最大日数(標準日数)と平均日数
2.各工程の最小費用(標準費用)、最大費用とその平均費用
3.属性数(晴れ/雨/雪)
4.従事者数
(出力データ)
1.日数tに関するファジィ・ランダム変数のメンバシップ関数の...
2.費用勾配cに関するファジィ・ランダム変数のメンバシップ関...
3.費用切片bに関するファジィ・ランダム変数のメンバシップ関...
#include<stdio.h>
#include<math.h>
#include<limits.h>
#include"../../hdr/random.h"
#include"../../hdr/util_okuhara.h"
#ifdef _Cdecl
#define drand() ((double)(rand() + 1) / 0x7fff - 0.5)
#else
#define drand() ((double)(rand() + 1) / 0x7fffffff - 0.5)
#endif
#define SEED 32767
#define STR_MAX 256
#define Proc_MAX 105 //最大作業工程数
#define Worker_MAX 105 //最大作業者数
#define Attri_MAX 5
#define ITE_MAX 105 //最大繰り返し回数
struct particle{
int process; //作業工程
int attribute; //属性
int period;
int reward;
};
static unsigned long seed = 1; /* 任意 */
int flag, Num_Proc, Num_Worker, Num_Attri;
double Ave_Proc[Proc_MAX], Var_Proc[Proc_MAX];
double Ave_Cost[Proc_MAX], Var_Cost[Proc_MAX];
double Std_Day[Proc_MAX], Std_Cost[Proc_MAX];
/*******************************************************...
/*******************************************************...
void Load_Data()
{
int i;
FILE *fp_out;
char fname[STR_MAX];
sprintf( fname, "../../out_dat/CPM.csv" );
fp_out = save_file( fname );
fclose(fp_out);
printf("乱数は一様(0)、正規(1)\n");
scanf("%d", &flag);
printf("作業工程数を入力\n");
scanf("%d", &Num_Proc);
printf("作業従事者数を入力\n");
scanf("%d", &Num_Worker);
printf("属性数を入力\n");
scanf("%d", &Num_Attri);
if( flag == 0 ){
for( i = 1; i <= Num_Proc; i++ ){
printf("作業工程%dの最小を入力\n", i);
scanf("%lf", &Ave_Proc[i]);
printf("作業工程%dの最大を入力(標準作業時間)\n", i);
scanf("%lf", &Var_Proc[i]);
}
for( i = 1; i <= Num_Proc; i++ ){
printf("作業賃金%dの最小を入力(標準費用)\n", i);
scanf("%lf", &Ave_Cost[i]);
printf("作業賃金%dの最大を入力\n", i);
scanf("%lf", &Var_Cost[i]);
}
for( i = 1; i <= Num_Proc; i++ ){
Std_Day[i] = Ave_Proc[i] + 3.*sqrt(Var_Proc[i]);
Std_Cost[i] = Ave_Cost[i] - 3.*sqrt(Var_Cost[i]);
}
}
if( flag == 1 ){
for( i = 1; i <= Num_Proc; i++ ){
printf("作業工程%dの平均を入力\n", i);
scanf("%lf", &Ave_Proc[i]);
printf("作業工程%dの分散を入力(標準作業時間:mean+2sig...
scanf("%lf", &Var_Proc[i]);
}
for( i = 1; i <= Num_Proc; i++ ){
printf("作業賃金%dの平均を入力(標準費用::mean-2sigma...
scanf("%lf", &Ave_Cost[i]);
printf("作業賃金%dの分散を入力\n", i);
scanf("%lf", &Var_Cost[i]);
}
for( i = 1; i <= Num_Proc; i++ ){
Std_Day[i] = Var_Proc[i];
Std_Cost[i] = Ave_Cost[i];
}
}
}
/*******************************************************...
/*******************************************************...
void Fuzzy_Data()
{
int i, j, k;
int wor, pro, att, per, rew;
int count[Worker_MAX][Proc_MAX][Attri_MAX];
double Fuzzy_L[Worker_MAX][Proc_MAX][Attri_MAX];
double Fuzzy_R[Worker_MAX][Proc_MAX][Attri_MAX];
double Fuzzy_C[Worker_MAX][Proc_MAX][Attri_MAX];
double trend, seppen;
double Fuzzy_CL[Worker_MAX][Proc_MAX][Attri_MAX];
double Fuzzy_CR[Worker_MAX][Proc_MAX][Attri_MAX];
double Fuzzy_CC[Worker_MAX][Proc_MAX][Attri_MAX];
double Fuzzy_BL[Worker_MAX][Proc_MAX][Attri_MAX];
double Fuzzy_BR[Worker_MAX][Proc_MAX][Attri_MAX];
double Fuzzy_BC[Worker_MAX][Proc_MAX][Attri_MAX];
FILE *fp_in, *fp_out;
char fname[STR_MAX];
if( flag == 0 )
sprintf( fname, "../../out_dat/CPM.csv" );
fp_in = load_file( fname );
if ( fp_in == NULL ){
printf ( "Cant open file !\n" );
exit(0);
}
for( i = 1; i <= Num_Worker; i++ ){
for( j = 1; j <= Num_Proc; j++ ){
for( k = 1; k <= Num_Attri; k++ ){
Fuzzy_L[i][j][k] = 10000.;
Fuzzy_R[i][j][k] = -10000.;
Fuzzy_C[i][j][k] = 0.;
Fuzzy_CL[i][j][k] = 10000.;
Fuzzy_CR[i][j][k] = -10000.;
Fuzzy_CC[i][j][k] = 0.;
Fuzzy_BL[i][j][k] = 10000.;
Fuzzy_BR[i][j][k] = -10000.;
Fuzzy_BC[i][j][k] = 0.;
count[i][j][k] = 0;
}
}
}
while( fscanf( fp_in, "%d %d %d %d %d", &wor, &pro, &att...
count[wor][pro][att] ++;
// 作業日数のファジィ
if( per < Fuzzy_L[wor][pro][att] )
Fuzzy_L[wor][pro][att] = per;
if( per > Fuzzy_R[wor][pro][att] )
Fuzzy_R[wor][pro][att] = per;
Fuzzy_C[wor][pro][att] += per;
// 費用効果の傾きのファジィ
trend = (double)(rew-Std_Cost[pro])/(double)(per-Std_Da...
printf("%lf(%d,%d,%d)\n", trend, wor, pro, att);
if( trend < Fuzzy_CL[wor][pro][att] )
Fuzzy_CL[wor][pro][att] = trend;
if( trend > Fuzzy_CR[wor][pro][att] )
Fuzzy_CR[wor][pro][att] = trend;
Fuzzy_CC[wor][pro][att] += trend;
// 費用効果の切片のファジィ
seppen = Std_Cost[pro] - trend*Std_Day[pro];
if( seppen < Fuzzy_BL[wor][pro][att] )
Fuzzy_BL[wor][pro][att] = seppen;
if( seppen > Fuzzy_BR[wor][pro][att] )
Fuzzy_BR[wor][pro][att] = seppen;
Fuzzy_BC[wor][pro][att] += seppen;
}
fclose( fp_in );
for( i = 1; i <= Num_Worker; i++ ){
for( j = 1; j <= Num_Proc; j++ ){
for( k = 1; k <= Num_Attri; k++ ){
Fuzzy_C[i][j][k] /= (double)(count[i][j][k]);
Fuzzy_CC[i][j][k] /= (double)(count[i][j][k]);
Fuzzy_BC[i][j][k] /= (double)(count[i][j][k]);
}
}
}
sprintf( fname, "../../out_dat/CPM_Fuzzy_period.csv" );
fp_out = save_file( fname );
for( i = 1; i <= Num_Worker; i++ ){
for( j = 1; j <= Num_Proc; j++ ){
for( k = 1; k <= Num_Attri; k++ ){
fprintf( fp_out, "%d\t %d\t %d\t %lf\t %lf\t %lf\n",
i, j, k, Fuzzy_L[i][j][k], Fuzzy_C[i][j][k], F...
}
}
}
fclose(fp_out);
sprintf( fname, "../../out_dat/CPM_Fuzzy_cost-period.csv...
fp_out = save_file( fname );
for( i = 1; i <= Num_Worker; i++ ){
for( j = 1; j <= Num_Proc; j++ ){
for( k = 1; k <= Num_Attri; k++ ){
fprintf( fp_out, "%d\t %d\t %d\t %lf\t %lf\t %lf\t %l...
i, j, k, Fuzzy_CL[i][j][k], Fuzzy_CC[i][j][k],...
Fuzzy_BL[i][j][k], Fuzzy_BC[i][j][k], Fuzzy_BR...
}
}
}
fclose(fp_out);
}
/*******************************************************...
/*******************************************************...
void Save_Data(struct particle personal[], int i)
{
FILE *fp_out;
char fname[STR_MAX];
sprintf( fname, "../../out_dat/CPM.csv" );
fp_out = save_add_file( fname );
fprintf( fp_out, "%d\t %d\t %d\t %d\t %d\n",
i, personal[i].process, personal[i].attrib...
personal[i].period, personal[i].reward );
fclose(fp_out);
}
/*******************************************************...
/*******************************************************...
//実数乱数
double frand(void)
{
double result;
while((result=(double)rand()/RAND_MAX)>=1);
return result;
}
/*******************************************************...
/*******************************************************...
int main(int argc, char **argv)
{
int i, j, k, l, total_data;
struct particle personal[Worker_MAX]; //作業者ごとの活...
srand(SEED); //乱数の初期化
Load_Data();
for( i = 1; i <= Num_Worker; i++ ){
for( j = 1; j <= ITE_MAX; j++ ){
if( frand() < 0.9 ){
k = Random(1, Num_Proc);
personal[i].process = k;
personal[i].attribute = Random(1, Num_Attri);
if( flag == 0 ){
personal[i].period = Random( Ave_Proc[k], Var_Proc[k...
personal[i].reward = Random( Ave_Cost[k], Var_Cost[k...
}
if( flag == 1 ){
personal[i].period = (int)(rand_normal( Ave_Proc[k],...
personal[i].reward = (int)(rand_normal( Ave_Cost[k],...
}
if( ( (personal[i].period < Std_Day[k]) && (personal[...
|| ( (personal[i].period == Std_Day[k]) && (person...
Save_Data(personal, i);
}
}
}
}
Fuzzy_Data();
printf("Finish! \n");
getchar();
getchar();
return(0);
}
ページ名: