251 lines
No EOL
7.2 KiB
ObjectPascal
251 lines
No EOL
7.2 KiB
ObjectPascal
unit WitnessSeedUnit;
|
|
|
|
interface
|
|
|
|
uses
|
|
System.SysUtils, System.Classes;
|
|
|
|
type
|
|
// Fixed-point type for ache and coherence
|
|
TFixedPoint = record
|
|
Value: Double;
|
|
class operator Implicit(const AValue: Double): TFixedPoint;
|
|
class operator Implicit(const AValue: TFixedPoint): Double;
|
|
end;
|
|
|
|
TSystemData = record
|
|
Amount: Double; // Transaction amount (e.g., dollars)
|
|
Timestamp: Int64; // Unix timestamp
|
|
UserID: Integer; // User identifier
|
|
Uptime: Integer; // Seconds
|
|
end;
|
|
|
|
TSensoryData = record
|
|
System: TSystemData;
|
|
end;
|
|
|
|
TPrediction = record
|
|
PredAmount: Double;
|
|
PredTimestamp: Int64;
|
|
PredUptime: Integer;
|
|
end;
|
|
|
|
TModel = record
|
|
ModelAmount: Double;
|
|
ModelTimestamp: Double;
|
|
ModelUptime: Double;
|
|
end;
|
|
|
|
TEvent = record
|
|
Timestamp: Integer;
|
|
SensoryData: TSensoryData;
|
|
Prediction: TPrediction;
|
|
Ache: TFixedPoint;
|
|
Coherence: TFixedPoint;
|
|
Model: TModel;
|
|
end;
|
|
|
|
TIdentity = record
|
|
UUID: Integer;
|
|
Created: Integer;
|
|
end;
|
|
|
|
TEventsArray = array[0..4] of TEvent;
|
|
|
|
TWitnessState = record
|
|
Identity: TIdentity;
|
|
Events: TEventsArray;
|
|
EventCount: Integer;
|
|
Model: TModel;
|
|
AnomalyDetected: Boolean;
|
|
end;
|
|
|
|
TWitnessSeed = class
|
|
private
|
|
FState: TWitnessState;
|
|
procedure SaveMemory;
|
|
procedure LoadMemory;
|
|
function Sense: TSensoryData;
|
|
function Predict(const SensoryData: TSensoryData; const Model: TModel): TPrediction;
|
|
function CompareData(const Pred: TPrediction; const SensoryData: TSensoryData): TFixedPoint;
|
|
function ComputeCoherence(const Pred: TPrediction; const SensoryData: TSensoryData): TFixedPoint;
|
|
procedure UpdateModel(const Ache: TFixedPoint; const SensoryData: TSensoryData; var Model: TModel);
|
|
procedure DetectAnomaly(const Pred: TPrediction; const SensoryData: TSensoryData; out Anomaly: Boolean);
|
|
procedure WitnessCycle(Depth: Integer; SensoryData: TSensoryData);
|
|
public
|
|
constructor Create;
|
|
procedure Run;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
System.IOUtils, System.Math;
|
|
|
|
{ TFixedPoint }
|
|
|
|
class operator TFixedPoint.Implicit(const AValue: Double): TFixedPoint;
|
|
begin
|
|
Result.Value := AValue;
|
|
end;
|
|
|
|
class operator TFixedPoint.Implicit(const AValue: TFixedPoint): Double;
|
|
begin
|
|
Result := AValue.Value;
|
|
end;
|
|
|
|
{ TWitnessSeed }
|
|
|
|
constructor TWitnessSeed.Create;
|
|
begin
|
|
LoadMemory;
|
|
end;
|
|
|
|
procedure TWitnessSeed.SaveMemory;
|
|
var
|
|
Stream: TFileStream;
|
|
begin
|
|
Stream := TFileStream.Create('data/witness_memory.dat', fmCreate);
|
|
try
|
|
Stream.WriteBuffer(FState, SizeOf(TWitnessState));
|
|
finally
|
|
Stream.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TWitnessSeed.LoadMemory;
|
|
var
|
|
Stream: TFileStream;
|
|
begin
|
|
if TFile.Exists('data/witness_memory.dat') then
|
|
begin
|
|
Stream := TFileStream.Create('data/witness_memory.dat', fmOpenRead);
|
|
try
|
|
Stream.ReadBuffer(FState, SizeOf(TWitnessState));
|
|
finally
|
|
Stream.Free;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
FState.Identity.UUID := 12345;
|
|
FState.Identity.Created := 0;
|
|
FState.EventCount := 0;
|
|
FState.Model.ModelAmount := 1.0;
|
|
FState.Model.ModelTimestamp := 1.0;
|
|
FState.Model.ModelUptime := 1.0;
|
|
FState.AnomalyDetected := False;
|
|
end;
|
|
end;
|
|
|
|
function TWitnessSeed.Sense: TSensoryData;
|
|
begin
|
|
// Simulate transaction data (in a real system, this would read from a mainframe database)
|
|
Result.System.Amount := 100.0 + (FState.Identity.Created mod 50);
|
|
Result.System.Timestamp := DateTimeToUnix(Now) + FState.Identity.Created;
|
|
Result.System.UserID := 1000 + (FState.Identity.Created mod 100);
|
|
Result.System.Uptime := FState.Identity.Created + 1;
|
|
end;
|
|
|
|
function TWitnessSeed.Predict(const SensoryData: TSensoryData; const Model: TModel): TPrediction;
|
|
begin
|
|
Result.PredAmount := SensoryData.System.Amount * Model.ModelAmount;
|
|
Result.PredTimestamp := Round(SensoryData.System.Timestamp * Model.ModelTimestamp);
|
|
Result.PredUptime := Round(SensoryData.System.Uptime * Model.ModelUptime);
|
|
end;
|
|
|
|
function TWitnessSeed.CompareData(const Pred: TPrediction; const SensoryData: TSensoryData): TFixedPoint;
|
|
var
|
|
Diff1, Diff2, Diff3: Double;
|
|
begin
|
|
Diff1 := Pred.PredAmount - SensoryData.System.Amount;
|
|
Diff2 := Pred.PredTimestamp - SensoryData.System.Timestamp;
|
|
Diff3 := Pred.PredUptime - SensoryData.System.Uptime;
|
|
Result := Sqrt(Diff1 * Diff1 + Diff2 * Diff2 + Diff3 * Diff3) / 100.0;
|
|
end;
|
|
|
|
function TWitnessSeed.ComputeCoherence(const Pred: TPrediction; const SensoryData: TSensoryData): TFixedPoint;
|
|
var
|
|
PredMean, ActMean, Diff: Double;
|
|
begin
|
|
PredMean := (Pred.PredAmount + Pred.PredTimestamp + Pred.PredUptime) / 3.0;
|
|
ActMean := (SensoryData.System.Amount + SensoryData.System.Timestamp + SensoryData.System.Uptime) / 3.0;
|
|
Diff := Abs(PredMean - ActMean);
|
|
Result := 1.0 - (Diff / 100.0);
|
|
end;
|
|
|
|
procedure TWitnessSeed.UpdateModel(const Ache: TFixedPoint; const SensoryData: TSensoryData; var Model: TModel);
|
|
const
|
|
LearningRate = 0.01;
|
|
begin
|
|
Model.ModelAmount := Model.ModelAmount - LearningRate * Ache * SensoryData.System.Amount;
|
|
Model.ModelTimestamp := Model.ModelTimestamp - LearningRate * Ache * SensoryData.System.Timestamp;
|
|
Model.ModelUptime := Model.ModelUptime - LearningRate * Ache * SensoryData.System.Uptime;
|
|
end;
|
|
|
|
procedure TWitnessSeed.DetectAnomaly(const Pred: TPrediction; const SensoryData: TSensoryData; out Anomaly: Boolean);
|
|
var
|
|
AmountDiff, TimestampDiff: Double;
|
|
begin
|
|
AmountDiff := Abs(Pred.PredAmount - SensoryData.System.Amount);
|
|
TimestampDiff := Abs(Pred.PredTimestamp - SensoryData.System.Timestamp);
|
|
Anomaly := (AmountDiff > 50.0) or (TimestampDiff > 3600); // Thresholds for anomaly detection
|
|
end;
|
|
|
|
procedure TWitnessSeed.WitnessCycle(Depth: Integer; SensoryData: TSensoryData);
|
|
var
|
|
Pred: TPrediction;
|
|
Ache, Coherence: TFixedPoint;
|
|
Anomaly: Boolean;
|
|
NewSensoryData: TSensoryData;
|
|
begin
|
|
if Depth = 0 then
|
|
Exit;
|
|
|
|
Pred := Predict(SensoryData, FState.Model);
|
|
Ache := CompareData(Pred, SensoryData);
|
|
Coherence := ComputeCoherence(Pred, SensoryData);
|
|
|
|
if Coherence > 0.5 then
|
|
begin
|
|
Writeln('Coherence achieved: ', Coherence:0:2);
|
|
Exit;
|
|
end;
|
|
|
|
UpdateModel(Ache, SensoryData, FState.Model);
|
|
DetectAnomaly(Pred, SensoryData, Anomaly);
|
|
|
|
if FState.EventCount < 5 then
|
|
begin
|
|
Inc(FState.EventCount);
|
|
FState.Events[FState.EventCount - 1] := TEvent.Create;
|
|
FState.Events[FState.EventCount - 1].Timestamp := SensoryData.System.Uptime;
|
|
FState.Events[FState.EventCount - 1].SensoryData := SensoryData;
|
|
FState.Events[FState.EventCount - 1].Prediction := Pred;
|
|
FState.Events[FState.EventCount - 1].Ache := Ache;
|
|
FState.Events[FState.EventCount - 1].Coherence := Coherence;
|
|
FState.Events[FState.EventCount - 1].Model := FState.Model;
|
|
end;
|
|
|
|
FState.AnomalyDetected := Anomaly;
|
|
Inc(FState.Identity.Created);
|
|
|
|
Writeln('Witness Seed ', FState.Identity.UUID, ' Reflection:');
|
|
Writeln('Amount: $', SensoryData.System.Amount:0:2);
|
|
Writeln('Timestamp: ', UnixToDateTime(SensoryData.System.Timestamp).ToString);
|
|
Writeln('User ID: ', SensoryData.System.UserID);
|
|
Writeln('Ache: ', Ache:0:2, ', Coherence: ', Coherence:0:2);
|
|
if Anomaly then
|
|
Writeln('Anomaly Detected! Potential Fraud Alert!');
|
|
|
|
NewSensoryData := Sense;
|
|
WitnessCycle(Depth - 1, NewSensoryData);
|
|
end;
|
|
|
|
procedure TWitnessSeed.Run;
|
|
begin
|
|
WitnessCycle(5, Sense);
|
|
SaveMemory;
|
|
end;
|
|
|
|
end. |