bool nn_fuzzy_set::normal_set() { reset_position(); while (!end_of_set()) { if(get_membership() == 1) return true; next_member(); } return false; }
nn_fuzzy_set nn_fuzzy_set::strong_alpha_cut(double alpha) { nn_fuzzy_set result; reset_position(); while (!end_of_set()) { if(get_membership() > alpha) result.add_new(get_member(),get_membership()); next_member(); } return result; }
nn_fuzzy_set nn_fuzzy_set::crossover() { nn_fuzzy_set result; reset_position(); while (!end_of_set()) { if(get_membership() == 0.5) result.add_new(get_member(),get_membership()); next_member(); } return result; }
nn_fuzzy_set nn_fuzzy_set::support() { nn_fuzzy_set result; reset_position(); while (!end_of_set()) { if(get_membership() > 0) result.add_new(get_member(),get_membership()); next_member(); } return result; }
bool nn_fuzzy_set::complement(int type = NN_COMPLEMENT_NORMAL, int parameter = 1) { switch (type) { case NN_COMPLEMENT_NORMAL: // perform complement by the normal complement method like in crisp sets reset_position(); while(!end_of_set()) { set_membership(1 - get_membership()); next_member(); } return true; case NN_COMPLEMENT_SUGENOCLASS: // perform complement by the sugeno class of operators reset_position(); while(!end_of_set()) { set_membership((1 - get_membership()) / (1 + (parameter * get_membership()))); next_member(); } return true; default: return NULL; } }
int main() { int input_num = 0; char member_name[256]; // 初期化処理 initialize(); while(input_num != 10){ // 入力値により処理を分岐 printf("*----------------------*\n1:前のメンバーへ移動\n2:次のメンバーへ移動\n3:今のメンバーを確認\n4:新規メンバー登録\n5:メンバー削除\n6:すべてのメンバーを確認\n10:終了\n*----------------------*\ninput number > "); // TODO 入力チェック scanf("%d",&input_num); switch (input_num) { case 1: // 前のメンバーへ移動 prev_member(); break; case 2: // 次のメンバーへ移動 next_member(); break; case 3: // 今のメンバーを確認 disp_member(); break; case 4: // 新規メンバー作成 printf("新しく作成するメンバーの名前を入力してください。\ninput name > "); scanf("%s", member_name); add_member(member_name); break; case 5: // 今のメンバーを削除 delete_member(); break; case 6: // すべてメンバーを確認 disp_all_members(); break; case 10: // 終了 printf("終了します。\n\n"); break; default: printf("入力値が不正です。\n\n"); break; } } // 終了処理 finalize(); return 0; }
nn_fuzzy_set nn_fuzzy_set::t_norm(nn_fuzzy_set op2,int type = NN_TNORM_MINIMUM) { nn_fuzzy_set result; reset_position(); op2.reset_position(); if (nn_size() != op2.nn_size()) { nn_incompatibleFuzzySetsException ex; throw ex; } switch (type) { case NN_TNORM_MINIMUM: while (!end_of_set()) { if (get_member() != op2.get_member()) { nn_incompatibleFuzzySetsException ex; throw ex; } if (get_membership() > op2.get_membership()) { result.add_new(get_member(), op2.get_membership()); } else { result.add_new(get_member(), get_membership()); } next_member(); op2.next_member(); } break; case NN_TNORM_PRODUCT: while (!end_of_set()) { if (get_member() != op2.get_member()) { nn_incompatibleFuzzySetsException ex; throw ex; } result.add_new(get_member(), get_membership() * op2.get_membership()); next_member(); op2.next_member(); } break; case NN_TNORM_EINSTEIN_PRODUCT: while (!end_of_set()) { if (get_member() != op2.get_member()) { nn_incompatibleFuzzySetsException ex; throw ex; } result.add_new(get_member(), (get_membership() * op2.get_membership()) / (2 - ((get_membership() + op2.get_membership()) - get_membership() * op2.get_membership()))); next_member(); op2.next_member(); } break; case NN_TNORM_DRASTIC_PRODUCT: while (!end_of_set()) { if (get_member() != op2.get_member()) { nn_incompatibleFuzzySetsException ex; throw ex; } if (op2.get_membership() == 1) { result.add_new(get_member(), get_membership()); } else if (get_membership() == 1) { result.add_new(get_member(), op2.get_membership()); } else { result.add_new(get_member(), 0.0); } next_member(); op2.next_member(); } break; default: break; } return result; }
nn_fuzzy_set nn_fuzzy_set::s_norm(nn_fuzzy_set op2,int type = NN_SNORM_MAXIMUM) { nn_fuzzy_set result; reset_position(); op2.reset_position(); if (nn_size() != op2.nn_size()) { nn_incompatibleFuzzySetsException ex; throw ex; } switch (type) { case NN_SNORM_MAXIMUM: while (!end_of_set()) { if (get_member() != op2.get_member()) { nn_incompatibleFuzzySetsException ex; throw ex; } if (get_membership() < op2.get_membership()) { result.add_new(get_member(), op2.get_membership()); } else { result.add_new(get_member(), get_membership()); } next_member(); op2.next_member(); } break; case NN_SNORM_SUM: while (!end_of_set()) { if (get_member() != op2.get_member()) { nn_incompatibleFuzzySetsException ex; throw ex; } result.add_new(get_member(), get_membership() + op2.get_membership() - (get_membership() * op2.get_membership())); next_member(); op2.next_member(); } break; case NN_SNORM_EINSTEIN_SUM: while (!end_of_set()) { if (get_member() != op2.get_member()) { nn_incompatibleFuzzySetsException ex; throw ex; } result.add_new(get_member(), get_membership() + op2.get_membership() / (1 + (get_membership() * op2.get_membership()))); next_member(); op2.next_member(); } break; case NN_SNORM_DRASTIC_SUM: while (!end_of_set()) { if (get_member() != op2.get_member()) { nn_incompatibleFuzzySetsException ex; throw ex; } if (op2.get_membership() == 0) { result.add_new(get_member(), get_membership()); } else if (get_membership() == 0) { result.add_new(get_member(), op2.get_membership()); } else { result.add_new(get_member(), 1.0); } next_member(); op2.next_member(); } break; default: break; } return result; }