Skip to content

Commit

Permalink
Poc #3
Browse files Browse the repository at this point in the history
  • Loading branch information
marvinbraga committed Jun 9, 2018
1 parent 3343949 commit 2ddc2a2
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 29 deletions.
26 changes: 13 additions & 13 deletions PoC/Marvin.PoC.IA.DataConverter.Clss.pas
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ interface

uses
System.Classes,
System.Generics.Collections,
Marvin.Core.InterfacedList,
Marvin.Core.IA.Connectionist.Classifier,
Marvin.PoC.IA.DataConverter;

Expand All @@ -13,7 +13,7 @@ TIrisDataConverter = class(TInterfacedObject, IDataConverter)
private
FData: TStrings;
protected
function Execute(out AList: TList<TDoubleArray>): IDataConverter;
function Execute(out AInputValues: IList<TDoubleArray>; out AOutputValues: IList<TDoubleArray>): IDataConverter;
class procedure Split(const ARecord: string; const AList: TStringList; const ADelimitador: Char = ';');
public
constructor Create(const ADataText: string);
Expand All @@ -25,6 +25,7 @@ implementation

uses
System.SysUtils,
Marvin.PoC.IA.Iris,
Marvin.PoC.IA.Iris.Clss;


Expand All @@ -43,31 +44,30 @@ destructor TIrisDataConverter.Destroy;
inherited;
end;

function TIrisDataConverter.Execute(out AList: TList<TDoubleArray>): IDataConverter;
function TIrisDataConverter.Execute(out AInputValues: IList<TDoubleArray>; out AOutputValues: IList<TDoubleArray>): IDataConverter;
var
LIndex: Integer;
LSplitedRecord: TStringList;
LIrisData: IIrisData;
begin
Result := Self;
AList := TList<TDoubleArray>.Create;
AInputValues := TCustomList<TDoubleArray>.Create;
AOutputValues := TCustomList<TDoubleArray>.Create;
{ transforma os dados em valores Double }
LSplitedRecord := TStringList.Create;
try
for LIndex := 0 to FData.Count - 1 do
begin
{ quebra os dados da string }
if not(FData[LIndex].Trim.IsEmpty) then
begin
{ quebra os dados da string }
TIrisDataConverter.Split(FData[LIndex], LSplitedRecord);
{ cria o dado }
LIrisData := TIrisData.New(LSplitedRecord[0].ToDouble, LSplitedRecord[1].ToDouble, LSplitedRecord[2].ToDouble, LSplitedRecord[3].ToDouble,
LSplitedRecord[4]);
{ converte em TDoubleArray }
AList.Add(
TIrisData.New(
LSplitedRecord[0].ToDouble,
LSplitedRecord[1].ToDouble,
LSplitedRecord[2].ToDouble,
LSplitedRecord[3].ToDouble,
LSplitedRecord[4])
.ToDoubleArray);
AInputValues.Add(LIrisData.GetInputValues);
AOutputValues.Add(LIrisData.GetOutputValues);
end;
end;
finally
Expand Down
5 changes: 3 additions & 2 deletions PoC/Marvin.PoC.IA.DataConverter.pas
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@ interface

uses
System.Generics.Collections,
Marvin.Core.IA.Connectionist.Classifier;
Marvin.Core.IA.Connectionist.Classifier,
Marvin.Core.InterfacedList;

type
IDataConverter = interface
['{3E020966-878E-4EE7-9495-508B37FCE12C}']
function Execute(out AList: TList<TDoubleArray>): IDataConverter;
function Execute(out AInputValues: IList<TDoubleArray>; out AOutputValues: IList<TDoubleArray>): IDataConverter;
end;

implementation
Expand Down
20 changes: 17 additions & 3 deletions PoC/Marvin.PoC.IA.Iris.Clss.pas
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ TIrisData = class(TInterfacedObject, IIrisData)
function Sepal: ISize;
function ClassName: string;
function ClassValue: Double;
function ToDoubleArray: TDoubleArray;
function GetInputValues: TDoubleArray;
function GetOutputValues: TDoubleArray;
public
constructor Create(const ASepalLength, ASepalWidth, APetalLength, APetalWidth: Double; const AClassName: string);
class function New(const ASepalLength, ASepalWidth, APetalLength, APetalWidth: Double; const AClassName: string): IIrisData;
Expand Down Expand Up @@ -128,12 +129,25 @@ function TIrisData.Sepal: ISize;
Result := FSepal;
end;

function TIrisData.ToDoubleArray: TDoubleArray;
function TIrisData.GetInputValues: TDoubleArray;
begin
Result := nil;
SetLength(Result, 4);
{ recupera os valores Double }
Result := [FSepal.Length, FSepal.Width, FPetal.Length, FPetal.Width, Self.ClassValue];
Result := [FSepal.Length, FSepal.Width, FPetal.Length, FPetal.Width];
end;

function TIrisData.GetOutputValues: TDoubleArray;
begin
Result := nil;
SetLength(Result, 3);
{ recupera os valores Double }
case Trunc(Self.ClassValue) of
1: Result := [1, 0, 0];
2: Result := [0, 1, 0];
else
Result := [0, 0, 1];
end;
end;

end.
3 changes: 2 additions & 1 deletion PoC/Marvin.PoC.IA.Iris.pas
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ interface
function Sepal: ISize;
function ClassName: string;
function ClassValue: Double;
function ToDoubleArray: TDoubleArray;
function GetInputValues: TDoubleArray;
function GetOutputValues: TDoubleArray;
end;

implementation
Expand Down
16 changes: 6 additions & 10 deletions PoC/Marvin.PoC.IA.StartUI.pas
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,17 @@ implementation

uses
{ marvin }
Marvin.Core.InterfacedList,
Marvin.Core.IA.Connectionist.MLPClassifier.Clss,
Marvin.PoC.IA.DataConverter,
Marvin.PoC.IA.DataConverter.Clss,
System.Generics.Collections;
Marvin.PoC.IA.DataConverter.Clss;

{$R *.dfm}

procedure TFormStart.ButtonLoadFileClick(Sender: TObject);
var
LStream: TStringStream;
LIrisData: TList<TDoubleArray>;
LIrisInputData, LIrisOutputData: IList<TDoubleArray>;
begin
if DlgData.Execute then
begin
Expand All @@ -61,15 +61,11 @@ procedure TFormStart.ButtonLoadFileClick(Sender: TObject);
LStream.LoadFromFile(DlgData.FileName);
MemoData.Lines.Text := LStream.DataString;
{ recupera os dados convertidos }
TIrisDataConverter.New(LStream.DataString).Execute(LIrisData);
try
{ faz o split dos dados para treino e teste }
TIrisDataConverter.New(LStream.DataString).Execute(LIrisInputData, LIrisOutputData);
{ faz o split dos dados para treino e teste }

finally
LIrisData.Free;
end;
finally
FreeAndNil(LStream);
LStream.Free;
end;
end;
end;
Expand Down
1 change: 1 addition & 0 deletions PoC/PoC.IA.dpr
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ uses
{$R *.res}

begin
ReportMemoryLeaksOnShutdown := (DebugHook <> 0);
Application.Initialize;
Application.MainFormOnTaskbar := True;
TStyleManager.TrySetStyle('Glossy');
Expand Down

0 comments on commit 2ddc2a2

Please sign in to comment.