📄 fuzzynumber.cs
字号:
}
}
/// Set operations
/// Set Operations need to go here as you can't create a base class set ( FuzzySet ) and
/// then down cast it in CSharp
/// ( Still thinking in C++ )
/// <summary>
/// return a union of the two passed sets
/// </summary>
/// <param name="setOne"></param>
/// <param name="setTwo"></param>
/// <returns></returns>
public FuzzyNumberSet Union( FuzzyNumberSet fuzzySet )
{
FuzzyNumberSet returnSet = new FuzzyNumberSet();
bool bFound = false;
for( int i=0; i<this.FuzzyArray.Count; i++ )
{
returnSet[ returnSet.Count + 1 ] = new FuzzyNumber( ( FuzzyNumber )this.FuzzyArray[ i ] );
}
/// Get the ones in set one but not in set two
for( int i=0; i<fuzzySet.Count; i++ )
{
bFound = false;
for( int n=0; n<this.Count; n++ )
{
if( ( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Maximum == ( ( FuzzyNumber )this.FuzzyArray[ n ] ).Maximum &&
( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Membership == ( ( FuzzyNumber )this.FuzzyArray[ n ] ).Membership &&
( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Minimum == ( ( FuzzyNumber )this.FuzzyArray[ n ] ).Minimum &&
( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Number == ( ( FuzzyNumber )this.FuzzyArray[ n ] ).Number )
{
bFound = true;
n=fuzzySet.Count;
}
}
if( bFound == false )
{
returnSet[ returnSet.Count + 1 ] = new FuzzyNumber( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] );
}
}
return returnSet;
}
/// <summary>
/// Union override that allows the setting of the membership parameters
/// </summary>
/// <param name="setOne"></param>
/// <param name="setTwo"></param>
/// <param name="setParams"></param>
/// <returns></returns>
public FuzzyNumberSet Union( FuzzyNumberSet fuzzySet, FuzzySetParameters setParams )
{
FuzzyNumberSet returnSet = new FuzzyNumberSet();
double dSetOneMinMinimum;
double dSetOneMaxMinimum;
double dSetOneMinMembership;
double dSetOneMaxMembership;
double dSetOneMinMaximum;
double dSetOneMaxMaximum;
double dSetOneMinNumber;
double dSetOneMaxNumber;
double dSetTwoMinMinimum;
double dSetTwoMaxMinimum;
double dSetTwoMinMembership;
double dSetTwoMaxMembership;
double dSetTwoMinMaximum;
double dSetTwoMaxMaximum;
double dSetTwoMinNumber;
double dSetTwoMaxNumber;
/// get all the items from set one that fit the required ( passed in ) parameters.
for( int i=0; i<this.Count; i++ )
{
if( setParams.SetOneMaxMembership == 0 )
dSetOneMaxMembership = ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Membership;
else
dSetOneMaxMembership = setParams.SetOneMaxMembership;
if( setParams.SetOneMaxMinimum == 0 )
dSetOneMaxMinimum = ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Minimum;
else
dSetOneMaxMinimum = setParams.SetOneMaxMinimum;
if( setParams.SetOneMaxNumber == 0 )
dSetOneMaxNumber = ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Number;
else
dSetOneMaxNumber = setParams.SetOneMaxNumber;
if( setParams.SetOneMinMaximum == 0 )
dSetOneMinMaximum = ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Maximum;
else
dSetOneMinMaximum = setParams.SetOneMinMaximum;
if( setParams.SetOneMaxMaximum == 0 )
dSetOneMaxMaximum = ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Maximum;
else
dSetOneMaxMaximum = setParams.SetOneMaxMaximum;
if( setParams.SetOneMinMembership == 0 )
dSetOneMinMembership = ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Membership;
else
dSetOneMinMembership = setParams.SetOneMinMembership;
if( setParams.SetOneMinMinimum == 0 )
dSetOneMinMinimum = ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Minimum;
else
dSetOneMinMinimum = setParams.SetOneMinMinimum;
if( setParams.SetOneMinNumber == 0 )
dSetOneMinNumber = ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Number;
else
dSetOneMinNumber = setParams.SetOneMinNumber;
if( ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Membership <= dSetOneMaxMembership &&
( ( FuzzyNumber )this.FuzzyArray[ i ] ).Maximum <= dSetOneMaxMaximum &&
( ( FuzzyNumber )this.FuzzyArray[ i ] ).Minimum <= dSetOneMaxMinimum &&
( ( FuzzyNumber )this.FuzzyArray[ i ] ).Number <= dSetOneMaxNumber &&
( ( FuzzyNumber )this.FuzzyArray[ i ] ).Membership >= dSetOneMinMembership &&
( ( FuzzyNumber )this.FuzzyArray[ i ] ).Maximum >= dSetOneMinMaximum &&
( ( FuzzyNumber )this.FuzzyArray[ i ] ).Minimum >= dSetOneMinMinimum &&
( ( FuzzyNumber )this.FuzzyArray[ i ] ).Number >= dSetOneMinNumber )
{
returnSet[ returnSet.Count + 1 ] = new FuzzyNumber( ( FuzzyNumber )this.FuzzyArray[ i ] );
}
}
/// Get the ones in set two, not in set one ( though none should be when comparing different sets )
for( int i=0; i<fuzzySet.Count; i++ )
{
if( setParams.SetTwoMaxMembership == 0 )
dSetTwoMaxMembership = ( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Membership;
else
dSetTwoMaxMembership = setParams.SetTwoMaxMembership;
if( setParams.SetTwoMaxMinimum == 0 )
dSetTwoMaxMinimum = ( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Minimum;
else
dSetTwoMaxMinimum = setParams.SetTwoMaxMinimum;
if( setParams.SetTwoMaxNumber == 0 )
dSetTwoMaxNumber = ( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Number;
else
dSetTwoMaxNumber = setParams.SetTwoMaxNumber;
if( setParams.SetTwoMinMaximum == 0 )
dSetTwoMinMaximum = ( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Maximum;
else
dSetTwoMinMaximum = setParams.SetTwoMinMaximum;
if( setParams.SetTwoMaxMaximum == 0 )
dSetTwoMaxMaximum = ( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Maximum;
else
dSetTwoMaxMaximum = setParams.SetTwoMaxMaximum;
if( setParams.SetTwoMinMembership == 0 )
dSetTwoMinMembership = ( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Membership;
else
dSetTwoMinMembership = setParams.SetTwoMinMembership;
if( setParams.SetTwoMinMinimum == 0 )
dSetTwoMinMinimum = ( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Minimum;
else
dSetTwoMinMinimum = setParams.SetTwoMinMinimum;
if( setParams.SetTwoMinNumber == 0 )
dSetTwoMinNumber = ( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Number;
else
dSetTwoMinNumber = setParams.SetTwoMinNumber;
for( int n=0; n<fuzzySet.Count; n++ )
{
if( setParams.SetOneMaxMembership == 0 )
dSetOneMaxMembership = ( ( FuzzyNumber )this.FuzzyArray[ n ] ).Membership;
else
dSetOneMaxMembership = setParams.SetOneMaxMembership;
if( setParams.SetOneMaxMinimum == 0 )
dSetOneMaxMinimum = ( ( FuzzyNumber )this.FuzzyArray[ n ] ).Minimum;
else
dSetOneMaxMinimum = setParams.SetOneMaxMinimum;
if( setParams.SetOneMaxNumber == 0 )
dSetOneMaxNumber = ( ( FuzzyNumber )this.FuzzyArray[ n ] ).Number;
else
dSetOneMaxNumber = setParams.SetOneMaxNumber;
if( setParams.SetOneMinMaximum == 0 )
dSetOneMinMaximum = ( ( FuzzyNumber )this.FuzzyArray[ n ] ).Maximum;
else
dSetOneMinMaximum = setParams.SetOneMinMaximum;
if( setParams.SetOneMaxMaximum == 0 )
dSetOneMaxMaximum = ( ( FuzzyNumber )this.FuzzyArray[ n ] ).Maximum;
else
dSetOneMaxMaximum = setParams.SetOneMaxMaximum;
if( setParams.SetOneMinMembership == 0 )
dSetOneMinMembership = ( ( FuzzyNumber )this.FuzzyArray[ n ] ).Membership;
else
dSetOneMinMembership = setParams.SetOneMinMembership;
if( setParams.SetOneMinMinimum == 0 )
dSetOneMinMinimum = ( ( FuzzyNumber )this.FuzzyArray[ n ] ).Minimum;
else
dSetOneMinMinimum = setParams.SetOneMinMinimum;
if( setParams.SetOneMinNumber == 0 )
dSetOneMinNumber = ( ( FuzzyNumber )this.FuzzyArray[ n ] ).Number;
else
dSetOneMinNumber = setParams.SetOneMinNumber;
if( ( ( FuzzyNumber )this.FuzzyArray[ n ] ).Maximum >= dSetOneMinMaximum &&
( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Maximum >= dSetTwoMinMaximum &&
( ( FuzzyNumber )this.FuzzyArray[ n ] ).Maximum <= dSetOneMaxMaximum &&
( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Maximum <= dSetTwoMaxMaximum &&
( ( FuzzyNumber )this.FuzzyArray[ n ] ).Membership >= dSetOneMinMembership &&
( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Membership >= dSetTwoMinMembership &&
( ( FuzzyNumber )this.FuzzyArray[ n ] ).Membership <= dSetOneMaxMembership &&
( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Membership <= dSetTwoMaxMembership &&
( ( FuzzyNumber )this.FuzzyArray[ n ] ).Minimum >= dSetOneMinMinimum &&
( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Minimum >= dSetTwoMinMinimum &&
( ( FuzzyNumber )this.FuzzyArray[ n ] ).Minimum <= dSetOneMaxMinimum &&
( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Minimum <= dSetTwoMaxMinimum &&
( ( FuzzyNumber )this.FuzzyArray[ n ] ).Number >= dSetOneMinNumber &&
( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Number >= dSetTwoMinNumber &&
( ( FuzzyNumber )this.FuzzyArray[ n ] ).Number <= dSetOneMaxNumber &&
( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ).Number <= dSetTwoMaxNumber )
{
if( returnSet.IsInSet( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] ) == false )
{
returnSet[ returnSet.Count + 1 ] = new FuzzyNumber( ( FuzzyNumber )fuzzySet.FuzzyArray[ i ] );
}
}
}
}
return returnSet;
}
/// <summary>
/// return an intersection of the two sets
/// </summary>
/// <param name="setOne"></param>
/// <param name="?"></param>
/// <returns></returns>
public FuzzyNumberSet Intersection( FuzzyNumberSet fuzzySet )
{
FuzzyNumberSet returnSet = new FuzzyNumberSet();
for( int i=0; i<this.Count; i++ )
{
for( int n=0; n<fuzzySet.Count; n++ )
{
/// can't decide if name and id should be in here or not
/// leave them out for now as they are meant to be optional
if( ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Maximum == ( ( FuzzyNumber )fuzzySet.FuzzyArray[ n ] ).Maximum &&
( ( FuzzyNumber )this.FuzzyArray[ i ] ).Membership == ( ( FuzzyNumber )fuzzySet.FuzzyArray[ n ] ).Membership &&
( ( FuzzyNumber )this.FuzzyArray[ i ] ).Minimum == ( ( FuzzyNumber )fuzzySet.FuzzyArray[ n ] ).Minimum &&
( ( FuzzyNumber )this.FuzzyArray[ i ] ).Number == ( ( FuzzyNumber )fuzzySet.FuzzyArray[ n ] ).Number )
{
returnSet[ returnSet.Count + 1 ] = new FuzzyNumber( ( FuzzyNumber )this.FuzzyArray[ i ] );
}
}
}
return returnSet;
}
/// <summary>
/// return an intersection of the two sets and allow the passing in of the required membership values
/// </summary>
/// <param name="setOne"></param>
/// <param name="setTwo"></param>
/// <param name="setOneMinMembership"></param>
/// <param name="setOneMaxMembership"></param>
/// <param name="setTwoMinMembership"></param>
/// <param name="setTwoMaxMembership"></param>
/// <returns></returns>
public FuzzyNumberSet Intersection( FuzzyNumberSet fuzzySet, FuzzySetParameters setParams )
{
FuzzyNumberSet returnSet = new FuzzyNumberSet();
double dSetOneMinMinimum;
double dSetOneMaxMinimum;
double dSetOneMinMembership;
double dSetOneMaxMembership;
double dSetOneMinMaximum;
double dSetOneMaxMaximum;
double dSetOneMinNumber;
double dSetOneMaxNumber;
double dSetTwoMinMinimum;
double dSetTwoMaxMinimum;
double dSetTwoMinMembership;
double dSetTwoMaxMembership;
double dSetTwoMinMaximum;
double dSetTwoMaxMaximum;
double dSetTwoMinNumber;
double dSetTwoMaxNumber;
for( int i=0; i<this.Count; i++ )
{
if( setParams.SetOneMaxMembership == 0 )
dSetOneMaxMembership = ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Membership;
else
dSetOneMaxMembership = setParams.SetOneMaxMembership;
if( setParams.SetOneMaxMinimum == 0 )
dSetOneMaxMinimum = ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Minimum;
else
dSetOneMaxMinimum = setParams.SetOneMaxMinimum;
if( setParams.SetOneMaxNumber == 0 )
dSetOneMaxNumber = ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Number;
else
dSetOneMaxNumber = setParams.SetOneMaxNumber;
if( setParams.SetOneMinMaximum == 0 )
dSetOneMinMaximum = ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Maximum;
else
dSetOneMinMaximum = setParams.SetOneMinMaximum;
if( setParams.SetOneMaxMaximum == 0 )
dSetOneMaxMaximum = ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Maximum;
else
dSetOneMaxMaximum = setParams.SetOneMaxMaximum;
if( setParams.SetOneMinMembership == 0 )
dSetOneMinMembership = ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Membership;
else
dSetOneMinMembership = setParams.SetOneMinMembership;
if( setParams.SetOneMinMinimum == 0 )
dSetOneMinMinimum = ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Minimum;
else
dSetOneMinMinimum = setParams.SetOneMinMinimum;
if( setParams.SetOneMinNumber == 0 )
dSetOneMinNumber = ( ( FuzzyNumber )this.FuzzyArray[ i ] ).Number;
else
dSetOneMinNumber = setParams.SetOneMinNumber;
for( int n=0; n<fuzzySet.Count; n++ )
{
if( setParams.SetTwoMaxMembership == 0 )
dSetTwoMaxMembership = ( ( FuzzyNumber )fuzzySet.FuzzyArray[ n ] ).Membership;
else
dSetTwoMaxMembership = setParams.SetTwoMaxMembership;
if( setParams.SetTwoMaxMinimum == 0 )
dSetTwoMaxMinimum = ( ( FuzzyNumber )fuzzySet.FuzzyArray[ n ] ).Minimum;
else
dSetTwoMaxMinimum = setParams.SetTwoMaxMinimum;
if( setParams.SetTwoMaxNumber == 0 )
dSetTwoMaxNumber = ( ( FuzzyNumber )fuzzySet.FuzzyArray[ n ] ).Number;
else
dSetTwoMaxNumber = setParams.SetTwoMaxNumber;
if( setParams.SetTwoMinMaximum == 0 )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -