Скачиваний:
30
Добавлен:
01.05.2014
Размер:
4 Кб
Скачать
unit RuleItem;

interface
uses
    ItemSet,
    dmmTypes,
    uContainers,
    Instances,
    DoubleObject,
    DmmConstants,
    math,
    Classes,
    SysUtils;

  type
    TDMRuleItem = class (TObject)

  public
    //левая часть правила
    m_premise : TDMItemSet;

    //правая часть правила
    m_consequence : TDMItemSet;

    //ожидаемая точность предсказания
    m_accuracy : double ;

    m_genTime : integer;

    m_OwnValues : boolean;

    m_OwnValuesCons : boolean;

  public

    constructor Create(premise : TDMItemSet; consequence : TDMItemSet;
                       OwnValuesItems : boolean = false); overload;
    constructor Create(premise : TDMItemSet; consequence : TDMItemSet;
                       genTime : integer; ruleSupport : integer;
                       OwnValuesItems : boolean = false); overload;

    property OwnValues: Boolean read m_OwnValues write m_OwnValues;
    property OwnValuesCons: Boolean read m_OwnValuesCons write m_OwnValuesCons;

    function premise() : TDMItemSet;
    function consequence() : TDMItemSet;
    function equals(o : TObject) : boolean;
    function accuracy() : double;
    function compareTo(o : TObject ) : integer;
    destructor Destroy;override;

  end;


implementation

  constructor TDMRuleItem.Create( premise : TDMItemSet; consequence : TDMItemSet;
                       OwnValuesItems : boolean = false);
  begin
     m_premise := premise;
     m_premise.OwnValues := OwnValuesItems;
     m_consequence := consequence;
     m_OwnValues := false;
     m_OwnValuesCons := true;
  end;

  constructor TDMRuleItem.Create(premise : TDMItemSet; consequence : TDMItemSet;
                                 genTime : integer; ruleSupport : integer;
                                 OwnValuesItems : boolean );
  begin
     m_premise := premise;
     m_premise.OwnValues := OwnValuesItems;
     m_consequence := consequence;
     m_OwnValues := false;
     m_OwnValuesCons := true;
     
     m_consequence.setCounter(ruleSupport);
     m_genTime := genTime;
  end;

  function TDMRuleItem.premise() : TDMItemSet;
  begin
     result := m_premise;
  end;

  function TDMRuleItem.consequence() : TDMItemSet;
  begin
    result := m_consequence;
  end;

  function TDMRuleItem.accuracy() : double;
  begin
    result := m_accuracy;
  end;

  function TDMRuleItem.equals(o : TObject) : boolean;
  begin
     if(o = nil) then
     begin
       result := false;
       exit;
     end;
     if( (m_premise.equals(  (o as TDMRuleItem).m_premise ) ) and (m_consequence.equals( (o as TDMRuleItem).m_consequence)) ) then
     begin
       result := true;
       exit;
     end;
     result := false;
  end;

  function TDMRuleItem.compareTo(o : TObject ) : integer;
  begin
    if(m_accuracy = (o as TDMRuleItem).m_accuracy) then
    begin
      if((m_genTime = (o as TDMRuleItem).m_genTime)) then
      begin
        result := 0;
		    exit;
      end;
      if(m_genTime > (o as TDMRuleItem).m_genTime) then
      begin
        result := -1;
		    exit;
      end;
      if(m_genTime < (o as TDMRuleItem).m_genTime) then
      begin
        result := 1;
		    exit;
      end;
    end;
	  if(m_accuracy < (o as TDMRuleItem).m_accuracy) then
    begin
		  result := -1;
      exit;
    end;
	    result := 1;
  end;

  destructor TDMRuleItem.Destroy;
  begin
    if(OwnValues)then
      FreeAndNil(m_premise);
    if(OwnValuesCons)then
    begin
      m_consequence.OwnValues := true;
      FreeAndNil(m_consequence);
    end;
  end;

end.
Соседние файлы в папке DMAssociations