EXPORT boolean _delete_from_ordered_pointers( POINTER p, POINTER **parray) { POINTER *q, *array; int j; if ((parray == NULL) || (*parray == NULL)) { (void) printf("WARNING in delete_from_ordered_pointers(), " "parray is NULL\n"); return NO; } array = *parray; if (!index_of_pointer_in_array(p,array,&j)) { (void) printf("WARNING in delete_from_ordered_pointers(), " "p not found in parray\n"); return NO; } for (q = array+j; *q; ++q) *q = *(q+1); end_of_set(array) -= sizeof(POINTER); if (end_of_set(array)==0) *parray = NULL; return YES; } /*end _delete_from_ordered_pointers*/
EXPORT boolean _add_to_pointers( POINTER newp, POINTER **parray) { if (expand_set((POINTER *)parray,2*sizeof(POINTER)) == FUNCTION_FAILED) return FUNCTION_FAILED; (*parray)[end_of_set(*parray)/sizeof(POINTER)] = newp; end_of_set(*parray) += sizeof(POINTER); return FUNCTION_SUCCEEDED; } /*end _add_to_pointers*/
EXPORT boolean _delete_from_ordered_pointers_at_location( int i, POINTER **parray) { POINTER *q; if ((*parray == NULL) || (i > size_of_pointers(*parray))) return FUNCTION_FAILED; for (q = *parray + i; *q; ++q) *q = *(q + 1); end_of_set(*parray) -= sizeof(POINTER); if (end_of_set(*parray)==0) *parray = NULL; return FUNCTION_SUCCEEDED; } /*end _delete_from_ordered_pointers_at_location*/
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; }
EXPORT boolean _delete_from_pointers( POINTER p, POINTER **parray) { POINTER *q; if (*parray == NULL) return FUNCTION_FAILED; for (q = *parray; *q; ++q) if (*q == p) break; if (*q == NULL) /* Pointer p not in array */ return FUNCTION_FAILED; *q = (*parray)[end_of_set(*parray)/sizeof(POINTER) - 1]; (*parray)[end_of_set(*parray)/sizeof(POINTER)-1] = NULL; end_of_set(*parray) -= sizeof(POINTER); if (end_of_set(*parray)==0) *parray = NULL; return FUNCTION_SUCCEEDED; } /*end _delete_from_pointers*/
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; } }
EXPORT boolean _add_to_ordered_pointers( POINTER newp, POINTER antep, POINTER **parray) { int j, k; if (expand_set((POINTER *)parray,2*sizeof(POINTER)) == FUNCTION_FAILED) return FUNCTION_FAILED; if (antep == NULL) j = (int)size_of_pointers(*parray)-1; else { if (!index_of_pointer_in_array(antep,*parray,&j)) return FUNCTION_FAILED; for (k = (int)size_of_pointers(*parray); k > j; --k) (*parray)[k+1] = (*parray)[k]; } (*parray)[j+1] = newp; end_of_set(*parray) += sizeof(POINTER); return FUNCTION_SUCCEEDED; } /*end _add_to_ordered_pointers*/
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; }