public static IFuzzySet CompositionOfBinaryRelations(IFuzzySet relation1, IFuzzySet relation2, IBinaryFunction tNorm, IBinaryFunction sNorm) //zadatak ne specificira koristi li se max-min kompozicija { //stoga je konfigurabilno MutableFuzzySet compositeRelation = new MutableFuzzySet(Domain.Combine(relation1.GetDomain().GetComponent(0), relation2.GetDomain().GetComponent(1))); if (relation1 == relation2) //jer ugnjezdjeni foreach nad istom 'relation' instancom stvara probleme { relation2 = DeepCopy(relation1); } foreach (DomainElement element1 in compositeRelation.GetDomain()) { int x = element1.GetComponentValue(0); int z = element1.GetComponentValue(1); double funccomp = compositeRelation.GetValueAt(DomainElement.Of(x, z)); double Max = 0; foreach (DomainElement element_a in relation1.GetDomain()) //funca { foreach (DomainElement element_b in relation2.GetDomain()) //funcb { if (element_a.GetComponentValue(1) == element_b.GetComponentValue(0)) { int y = element_a.GetComponentValue(1); //y Max = sNorm.ValueAt(tNorm.ValueAt(relation1.GetValueAt(DomainElement.Of(x, y)), relation2.GetValueAt(DomainElement.Of(y, z))), Max); } } } compositeRelation.Set(DomainElement.Of(x, z), Max); } return(compositeRelation); }
public static IFuzzySet UnaryOperation(IFuzzySet set, IUnaryFunction function) { var newSet = new MutableFuzzySet(set.GetDomain()); foreach (var element in newSet.GetDomain()) { newSet.Set(element, function.ValueAt(set.GetValueAt(element))); } return(newSet); }