Esempio n. 1
0
bool nn_fuzzy_set::normal_set() {
	reset_position();
	while (!end_of_set()) {
		if(get_membership() == 1)
			return true;
		next_member();
	}
	return false;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
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;
	}
}
Esempio n. 6
0
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;
}
Esempio n. 7
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;
}
Esempio n. 8
0
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;
}