ファジィルールの作成(メンバシップ関数の生成)

Namespace: fvalgcli
Assembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)

Syntax

C#
public static int fnFIE_fuzzy_generate_rule(
	FHANDLE htbl,
	int rule_no,
	F_FUZZY_BASE_PTR antec_memb,
	F_FUZZY_BASE_PTR concl_memb
)
Visual Basic
Public Shared Function fnFIE_fuzzy_generate_rule ( 
	htbl As FHANDLE,
	rule_no As Integer,
	antec_memb As F_FUZZY_BASE_PTR,
	concl_memb As F_FUZZY_BASE_PTR
) As Integer

Parameters

htbl
Type: fvalgcli..::..FHANDLE
ファジィ推論テーブルのハンドル
rule_no
Type: System..::..Int32
生成したいファジィルールの番号( [0,オープン時に指定したルール数-1] )
antec_memb
Type: fvalgcli..::..F_FUZZY_BASE_PTR
前提条件のメンバシップ関数生成用基準値配列 。fnFIE_fuzzy_open() 実行時に指定した前提条件数( antec_num )分の設定値が必要です。
concl_memb
Type: fvalgcli..::..F_FUZZY_BASE_PTR
結論のメンバシップ関数生成用パラメータの配列。fnFIE_fuzzy_open() 実行時に指定した結論数( concl_num )分の設定値が必要です。

Return Value

Type: Int32
以下のエラーコードを返します。

エラーコード:
f_err内容
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT 不正なオブジェクトが渡された
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_NO_LICENCE ライセンスエラー

Remarks

Examples

C# Copy imageCopy
//    $Revision: 1.1 $

using System;
using System.Collections.Generic;
using System.Text;
using fvalgcli;

namespace TC
{
    public partial class FIE
    {
        public void fnFIE_fuzzy_generate_rule(FHANDLE hFuzzy, int iRuleN, int iAntecN, int iConclN)
        {
            int status = (int)fvalgcli.f_err.F_ERR_NONE;

            for (int i = 0; i < iRuleN; i++)
            {
                // オブジェクトの宣言.
                F_FUZZY_BASE_PTR pAntec = F_FUZZY_BASE_PTR.Zero;
                F_FUZZY_BASE_PTR pConcl = F_FUZZY_BASE_PTR.Zero;

                try
                {
                    pAntec = F_FUZZY_BASE_PTR.alloc(iAntecN);
                    pConcl = F_FUZZY_BASE_PTR.alloc(iConclN);

                    int iAntecNo = 0;
                    pAntec[iAntecNo] = fuzzy_generate_rule_antec(i);
                    iAntecNo++;

                    int iConclNo = 0;
                    pConcl[iConclNo] = fuzzy_generate_rule_concl(i);
                    iConclNo++;

                    status = api.fnFIE_fuzzy_generate_rule(hFuzzy, i, pAntec, pConcl);
                    Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status);
                }
                finally
                {
                    pAntec.Dispose();
                    pConcl.Dispose();
                }
            }
        }

        /// <summary>
        /// テストデータ
        /// </summary>
        /// <param name="iRuleIndex">ルール指標 (0~)</param>
        /// <returns>
        ///        F_FUZZY_BASE 構造体にテストデータを設定して返します。
        /// </returns>
        private F_FUZZY_BASE fuzzy_generate_rule_antec(int iRuleIndex)
        {
            F_FUZZY_BASE result;

            switch (iRuleIndex)
            {
                default:
                case 0:
                    result.n1 = -1.0;
                    result.n2 = -1.0;
                    result.n3 = -1.0;
                    result.n4 = 0.0;
                    result.m = 1.0;
                    break;
                case 1:
                    result.n1 = -1.0;
                    result.n2 = 0.0;
                    result.n3 = 0.0;
                    result.n4 = 1.0;
                    result.m = 1.0;
                    break;
                case 2:
                    result.n1 = 0.0;
                    result.n2 = 1.0;
                    result.n3 = 1.0;
                    result.n4 = 1.0;
                    result.m = 1.0;
                    break;
            }
            return result;
        }

        /// <summary>
        /// テストデータ
        /// </summary>
        /// <param name="iRuleIndex">ルール指標 (0~)</param>
        /// <returns>
        ///        F_FUZZY_BASE 構造体にテストデータを設定して返します。
        /// </returns>
        private F_FUZZY_BASE fuzzy_generate_rule_concl(int iRuleIndex)
        {
            F_FUZZY_BASE result;

            switch (iRuleIndex)
            {
                default:
                case 0:
                    result.n1 = 0.0;
                    result.n2 = 1.0;
                    result.n3 = 1.0;
                    result.n4 = 1.0;
                    result.m  = 1.0;
                    break;
                case 1:
                    result.n1 = -1.0;
                    result.n2 =  0.0;
                    result.n3 =  0.0;
                    result.n4 =  1.0;
                    result.m  =  1.0;
                    break;
                case 2:
                    result.n1 = -1.0;
                    result.n2 = -1.0;
                    result.n3 = -1.0;
                    result.n4 =  0.0;
                    result.m  =  1.0;
                    break;
            }
            return result;
        }

                //iConclN = iConclNo + 1;



    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

Imports System.Collections.Generic
Imports System.Text
Imports fvalgcli

Public Partial Class FIE
    Public Sub fnFIE_fuzzy_generate_rule(hFuzzy As FHANDLE, iRuleN As Integer, iAntecN As Integer, iConclN As Integer)
        Dim status As Integer = CInt(fvalgcli.f_err.F_ERR_NONE)

        For i As Integer = 0 To iRuleN - 1
            ' オブジェクトの宣言.
            Dim pAntec As F_FUZZY_BASE_PTR = F_FUZZY_BASE_PTR.Zero
            Dim pConcl As F_FUZZY_BASE_PTR = F_FUZZY_BASE_PTR.Zero

            Try
                pAntec = F_FUZZY_BASE_PTR.alloc(iAntecN)
                pConcl = F_FUZZY_BASE_PTR.alloc(iConclN)

                Dim iAntecNo As Integer = 0
                pAntec(iAntecNo) = fuzzy_generate_rule_antec(i)
                iAntecNo += 1

                Dim iConclNo As Integer = 0
                pConcl(iConclNo) = fuzzy_generate_rule_concl(i)
                iConclNo += 1

                status = api.fnFIE_fuzzy_generate_rule(hFuzzy, i, pAntec, pConcl)
                Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err))
            Finally
                pAntec.Dispose()
                pConcl.Dispose()
            End Try
        Next
    End Sub

    ''' <summary>
    ''' テストデータ
    ''' </summary>
    ''' <param name="iRuleIndex">ルール指標 (0~)</param>
    ''' <returns>
    '''        F_FUZZY_BASE 構造体にテストデータを設定して返します。
    ''' </returns>
    Private Function fuzzy_generate_rule_antec(iRuleIndex As Integer) As F_FUZZY_BASE
        Dim result As F_FUZZY_BASE

        Select Case iRuleIndex
            Case 0
                result.n1 = -1.0
                result.n2 = -1.0
                result.n3 = -1.0
                result.n4 = 0.0
                result.m = 1.0
                Exit Select
            Case 1
                result.n1 = -1.0
                result.n2 = 0.0
                result.n3 = 0.0
                result.n4 = 1.0
                result.m = 1.0
                Exit Select
            Case 2
                result.n1 = 0.0
                result.n2 = 1.0
                result.n3 = 1.0
                result.n4 = 1.0
                result.m = 1.0
                Exit Select
        End Select
        Return result
    End Function

    ''' <summary>
    ''' テストデータ
    ''' </summary>
    ''' <param name="iRuleIndex">ルール指標 (0~)</param>
    ''' <returns>
    '''        F_FUZZY_BASE 構造体にテストデータを設定して返します。
    ''' </returns>
    Private Function fuzzy_generate_rule_concl(iRuleIndex As Integer) As F_FUZZY_BASE
        Dim result As F_FUZZY_BASE

        Select Case iRuleIndex
            Case 0
                result.n1 = 0.0
                result.n2 = 1.0
                result.n3 = 1.0
                result.n4 = 1.0
                result.m = 1.0
                Exit Select
            Case 1
                result.n1 = -1.0
                result.n2 = 0.0
                result.n3 = 0.0
                result.n4 = 1.0
                result.m = 1.0
                Exit Select
            Case 2
                result.n1 = -1.0
                result.n2 = -1.0
                result.n3 = -1.0
                result.n4 = 0.0
                result.m = 1.0
                Exit Select
        End Select
        Return result
    End Function

    'iConclN = iConclNo + 1;



End Class

See Also