From 1c9aefb6c00ed9406df07edb297beb3a96552e7c Mon Sep 17 00:00:00 2001 From: Marvin Date: Thu, 12 May 2022 08:52:17 +0200 Subject: [PATCH 01/16] on progress --- .../Agents/HubAgent/Behaviour/Default.cs | 2 + .../HubAgent/Types/OperationPosition.cs | 16 ++++++++ .../Agents/HubAgent/Types/StabilityManager.cs | 41 +++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 Mate.Production.Core/Agents/HubAgent/Types/OperationPosition.cs create mode 100644 Mate.Production.Core/Agents/HubAgent/Types/StabilityManager.cs diff --git a/Mate.Production.Core/Agents/HubAgent/Behaviour/Default.cs b/Mate.Production.Core/Agents/HubAgent/Behaviour/Default.cs index b4f3b398..8de29bf1 100644 --- a/Mate.Production.Core/Agents/HubAgent/Behaviour/Default.cs +++ b/Mate.Production.Core/Agents/HubAgent/Behaviour/Default.cs @@ -21,6 +21,8 @@ public Default(long maxBucketSize, WorkTimeGenerator workTimeGenerator, Simulati } internal CapabilityManager _capabilityManager { get; set; } = new CapabilityManager(); internal ProposalManager _proposalManager { get; set; } = new ProposalManager(); + + internal StabilityManager _stabilityManager { get; set; } = new StabilityManager(); private BucketManager _bucketManager { get; } private WorkTimeGenerator _workTimeGenerator { get; } public override bool Action(object message) diff --git a/Mate.Production.Core/Agents/HubAgent/Types/OperationPosition.cs b/Mate.Production.Core/Agents/HubAgent/Types/OperationPosition.cs new file mode 100644 index 00000000..3a0db74f --- /dev/null +++ b/Mate.Production.Core/Agents/HubAgent/Types/OperationPosition.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Mate.Production.Core.Agents.HubAgent.Types +{ + internal class OperationPosition : Tuple + { + public OperationPosition(int item1, string item2) : base(item1, item2) + { + + } + } +} diff --git a/Mate.Production.Core/Agents/HubAgent/Types/StabilityManager.cs b/Mate.Production.Core/Agents/HubAgent/Types/StabilityManager.cs new file mode 100644 index 00000000..76b54bff --- /dev/null +++ b/Mate.Production.Core/Agents/HubAgent/Types/StabilityManager.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static FBuckets; + +namespace Mate.Production.Core.Agents.HubAgent.Types +{ + internal class StabilityManager : Dictionary> + { + void AddEntryForBucket(FBucket bucket, int position, string resource) + { + foreach(var operation in bucket.Operations) + { + AddEntryForOperation(operation.Key, position, resource); + } + } + + void AddEntryForOperation(Guid operationKey, int position, string resource) + { + OperationPosition operationPosition = new(position, resource); + + if (this.TryGetValue(operationKey, out var operationPositionList)) + { + operationPositionList.Add(operationPosition); + } + else + { + this.Add(operationKey, new List((IEnumerable)operationPosition)); + } + } + + + //Anything to export to csv whatever + + //Create mean over values + + + } +} From 4071a92ddbedb36485b597ed014cb1d1fb0fd39f Mon Sep 17 00:00:00 2001 From: MarvinMat <38523923+MarvinMat@users.noreply.github.com> Date: Tue, 17 May 2022 10:05:21 +0200 Subject: [PATCH 02/16] some mesurements --- Mate.DataCore/Nominal/KpiType.cs | 1 + .../CollectorAgent/Collector.Analytics.Job.cs | 22 ++- .../CollectorAgent/Types/OperationPosition.cs | 35 +++++ .../CollectorAgent/Types/StabilityManager.cs | 140 ++++++++++++++++++ .../Agents/HubAgent/Behaviour/Central.cs | 36 ++++- .../Agents/HubAgent/Behaviour/Default.cs | 2 - .../HubAgent/Types/OperationPosition.cs | 16 -- .../Agents/HubAgent/Types/StabilityManager.cs | 41 ----- .../Agents/ResourceAgent/Behaviour/Default.cs | 45 +++++- .../ResourceAgent/Types/JobInProgress.cs | 21 ++- .../Mate.Production.Core.csproj | 2 +- .../Mate.Production.Immutables.fsproj | 1 + .../Reporting/FCreateStabilityMeasurements.fs | 12 ++ .../SimulationEnvironment/AgentSystem.cs | 51 ++++--- Mate.sln | 26 ++++ 15 files changed, 359 insertions(+), 92 deletions(-) create mode 100644 Mate.Production.Core/Agents/CollectorAgent/Types/OperationPosition.cs create mode 100644 Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs delete mode 100644 Mate.Production.Core/Agents/HubAgent/Types/OperationPosition.cs delete mode 100644 Mate.Production.Core/Agents/HubAgent/Types/StabilityManager.cs create mode 100644 Mate.Production.Immutables/Reporting/FCreateStabilityMeasurements.fs diff --git a/Mate.DataCore/Nominal/KpiType.cs b/Mate.DataCore/Nominal/KpiType.cs index b3893b15..3696d865 100644 --- a/Mate.DataCore/Nominal/KpiType.cs +++ b/Mate.DataCore/Nominal/KpiType.cs @@ -16,6 +16,7 @@ public enum KpiType Ooe, CapabilityIdle, ComputationalTime, + Stability, AverageResult = 999 } } diff --git a/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs b/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs index d6047e0e..4dae00c2 100644 --- a/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs +++ b/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs @@ -18,6 +18,7 @@ using static FComputationalTimers; using static FCreateSimulationJobs; using static FCreateSimulationResourceSetups; +using static FCreateStabilityMeasurements; using static FThroughPutTimes; using static FUpdateSimulationJobs; using static FUpdateSimulationWorkProviders; @@ -63,7 +64,8 @@ internal static List GetStreamTypes() typeof(FComputationalTimer), typeof(Hub.Instruction.Default.AddResourceToHub), typeof(BasicInstruction.ResourceBrakeDown), - typeof(FCreateSimulationResourceSetup) + typeof(FCreateSimulationResourceSetup), + typeof(FCreateStabilityMeasurement) }; } @@ -85,6 +87,7 @@ public bool EventHandle(SimulationMonitor simulationMonitor, object message) case FUpdateSimulationWorkProvider m: UpdateProvider(uswp: m); break; case FThroughPutTime m: UpdateThroughputTimes(m); break; case FComputationalTimer m: UpdateComputationalTimes(m); break; + case FCreateStabilityMeasurement m: CreateStabilityMeasurements(m); break; case Collector.Instruction.UpdateLiveFeed m: UpdateFeed(finalCall: m.GetObjectFromMessage); break; //case Hub.Instruction.AddResourceToHub m: RecoverFromBreak(item: m.GetObjectFromMessage); break; //case BasicInstruction.ResourceBrakeDown m: BreakDwn(item: m.GetObjectFromMessage); break; @@ -94,7 +97,11 @@ public bool EventHandle(SimulationMonitor simulationMonitor, object message) return true; } - + private void CreateStabilityMeasurements(FCreateStabilityMeasurement m) + { + StabilityManager.Instance.AddEntryForBucket(m.Keys, time: m.Time, position: m.Position, resource: m.Resource, start: m.Start, process: m.Process); + } + /// /// collect the resourceSetups of resource, cant be updated afterward /// @@ -151,6 +158,7 @@ private void UpdateFeed(bool finalCall) ThroughPut(finalCall); ComputationalTimes(finalCall); CallTotal(finalCall); + WriteOperationKeys(finalCall); CallAverageIdle(finalCall); LogToDB(writeResultsToDB: finalCall); @@ -195,6 +203,16 @@ private void CallAverageIdle(bool finalCall) Collector.Kpis.AddRange(kpis); } + private void WriteOperationKeys(bool finalCall) + { + if (finalCall) + { + var keyValueDic = StabilityManager.Instance.DoSomeStatistics(Collector.Config.GetOption().Value, Collector.Config.GetOption().Value); + + Collector.Kpis.AddRange(keyValueDic); + //StabilityManager.Instance.WriteFile(Collector.Config.GetOption().Value); + } + } private void CallTotal(bool finalCall) { diff --git a/Mate.Production.Core/Agents/CollectorAgent/Types/OperationPosition.cs b/Mate.Production.Core/Agents/CollectorAgent/Types/OperationPosition.cs new file mode 100644 index 00000000..22dbb465 --- /dev/null +++ b/Mate.Production.Core/Agents/CollectorAgent/Types/OperationPosition.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Mate.Production.Core.Agents.CollectorAgent.Types +{ + public enum Process + { + Dequeue, + Enqueue + } + + public class OperationPosition + { + public long Time { get; private set; } + public int Position { get; private set; } + public string Resource { get; private set; } + public long Start { get; private set; } + public string Process { get; private set; } + public long RealTime { get; } + + public OperationPosition(long time, int position, string resource, long start, string process) + { + Time = time; + Position = position; + Resource = resource; + Start = start; + Process = process; + RealTime = DateTime.Now.Ticks; + } + + } +} diff --git a/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs b/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs new file mode 100644 index 00000000..36c0970b --- /dev/null +++ b/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.Json; +using System.Linq; +using Mate.DataCore.ReportingModel; +using Mate.DataCore.Nominal; + +namespace Mate.Production.Core.Agents.CollectorAgent.Types +{ + public sealed class StabilityManager + { + private static readonly Lazy lazyStabilityManager + = new Lazy(() => new StabilityManager()); + + public static StabilityManager Instance => lazyStabilityManager.Value; + + private Dictionary> OperationDictionary = new Dictionary>(); + + public void AddEntryForBucket(List keys, long time, int position, string resource, long start, string process) + { + foreach (var key in keys) + { + AddEntryForOperation(time, key, position, resource, start, process); + } + } + + public void AddEntryForOperation(long time, string operationKey, int position, string resource, long start, string process) + { + OperationPosition operationPosition = new(time, position, resource, start, process); + + if (OperationDictionary.TryGetValue(operationKey, out var operationPositionList)) + { + operationPositionList.Add(operationPosition); + } + else + { + OperationDictionary.Add(operationKey, new List() { operationPosition }); + } + } + + + + public void WriteFile(int simNum) + { + string fileName = $"D:\\Work\\Data\\OperationDictionary{simNum.ToString()}.json"; + string jsonString = JsonSerializer.Serialize(OperationDictionary); + File.WriteAllText(fileName, jsonString); + } + + public void ReadFile() + { + string fileName = "D:\\Work\\Data\\OperationDictionary.json"; + string jsonString = File.ReadAllText(fileName); + OperationDictionary = JsonSerializer.Deserialize>>(jsonString)!; + + DoSomeStatistics(); + } + + public List DoSomeStatistics(int simNum=1, SimulationType simType = SimulationType.Default) + { + List keyValuePairs = new List(); + int result = 0; + int counter = 0; + + List averageList = new List(); + + Dictionary averagePosition = new(); + + //Central + + foreach (KeyValuePair> entry in OperationDictionary) + { + var data = entry.Value.OrderBy(x => x.RealTime).ToList(); + + for(int i = 0; i < data.Count-1; i++) + { + var actual = data[i]; + var next = data[i + 1]; + if (actual.Process != Process.Dequeue.ToString() || next.Process != Process.Enqueue.ToString()) + continue; + + + result++; + averageList.Add(Math.Abs(actual.Start - next.Start)); + if(averagePosition.TryGetValue(actual.Position, out var amount)) + { + averagePosition[actual.Position] = amount+1; + } + else + { + averagePosition.Add(actual.Position, 1); + } + + + if (next.Position.Equals(actual.Position) && next.Resource.Equals(actual.Resource)) + counter++; + + // wieviele Jobs haben tatsächlich die Maschine gewechselt? + // wieviele Jobs haben "nur" die Position in der Warteschlange + + } + } + + + + keyValuePairs.Add(CreateKpi("RatioUselessReplan", Math.Round(((double)counter / (double)result) * 100, 2), simNum, simType)); + keyValuePairs.Add(CreateKpi("AverageTimeSpan", averageList.Average(), simNum, simType)); + System.Diagnostics.Debug.WriteLine($"{counter} entries of {result}: {Math.Round(((double)counter/(double)result)*100,2)}%"); + System.Diagnostics.Debug.WriteLine($"Average timespan change {averageList.Average()}"); + + foreach (var positon in averagePosition.OrderBy(x => x.Key)) + { + keyValuePairs.Add((CreateKpi($"Position: {positon.Key}", positon.Value, simNum, simType))); + System.Diagnostics.Debug.WriteLine($"Position: {positon.Key} | {positon.Value}"); + } + + return keyValuePairs; + } + + + public Kpi CreateKpi(string name, double value, int simNumber, SimulationType simulationType) + { + return new Kpi + { + Name = name, + Value = value, + Time = 1, + KpiType = DataCore.Nominal.KpiType.Stability , + SimulationConfigurationId = 1, + SimulationNumber = simNumber, + IsFinal = true, + IsKpi = true, + SimulationType = simulationType, + ValueMin = 0, + ValueMax = 0 + }; + } + } +} diff --git a/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs b/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs index 699651a0..5f7a4c14 100644 --- a/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs +++ b/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs @@ -115,7 +115,7 @@ private void LoadProductionOrders(IActorRef inboxActorRef) CreateComputationalTime("TimeWriteConfirmations", lastStep); System.Diagnostics.Debug.WriteLine("Start GanttPlan"); - GanttPlanOptRunner.RunOptAndExport("Continuous", "C:\\Users\\admin\\GANTTPLAN\\GanttPlanOptRunner.exe"); //changed to Init - merged configs + GanttPlanOptRunner.RunOptAndExport("Continuous", "D:\\Work\\GANTTPLAN\\GanttPlanOptRunner.exe"); //changed to Init - merged configs System.Diagnostics.Debug.WriteLine("Finish GanttPlan"); lastStep = stopwatch.ElapsedMilliseconds - lastStep; @@ -126,6 +126,8 @@ private void LoadProductionOrders(IActorRef inboxActorRef) { foreach (var resourceState in _resourceManager.resourceStateList) { + JobToStabilityManager(resourceState.ActivityQueue, resourceState, Mate.Production.Core.Agents.CollectorAgent.Types.Process.Dequeue); + // put to an sorted Queue on each Resource resourceState.ActivityQueue = new Queue( localGanttPlanDbContext.GptblProductionorderOperationActivityResourceInterval @@ -144,6 +146,8 @@ private void LoadProductionOrders(IActorRef inboxActorRef) && x.ProductionorderOperationActivityResource.ProductionorderOperationActivity.Status != (int)GanttActivityState.Started)) .OrderBy(x => x.DateFrom) .ToList()); + + JobToStabilityManager(resourceState.ActivityQueue, resourceState, Mate.Production.Core.Agents.CollectorAgent.Types.Process.Enqueue); } // filter Done and in Progress? var tempsalesorder = _SalesorderMaterialrelations; @@ -186,6 +190,36 @@ private void LoadProductionOrders(IActorRef inboxActorRef) inboxActorRef.Tell(new FCentralGanttPlanInformations.FCentralGanttPlanInformation(JsonConvert.SerializeObject(timeStamps), "Plan"), this.Agent.Context.Self); } + private void JobToStabilityManager(Queue queue, ResourceState resource, Mate.Production.Core.Agents.CollectorAgent.Types.Process process) + { + if (queue == null || queue.Count == 0 ) + return; + + for (int i = 0; i < queue.Count; i++) + { + AddToStabilityManager(queue.ElementAt(i), i, resource, process); + } + } + private void AddToStabilityManager(GptblProductionorderOperationActivityResourceInterval job, int position, ResourceState resource, Mate.Production.Core.Agents.CollectorAgent.Types.Process process) + { + if (resource.ResourceDefinition.ResourceType != ResourceType.Workcenter) + return; + + var operationKeys = new List(){ job.GetKey}; + var pub = new FCreateStabilityMeasurements.FCreateStabilityMeasurement( + keys: operationKeys + , time: Agent.CurrentTime + , position: position + , resource: resource.ResourceDefinition.Name + , start: job.DateFrom.ToSimulationTime() + , process: process.ToString() + ); + + Agent.Context.System.EventStream.Publish(@event: pub); + + } + + private void StartActivities() { foreach (var resourceState in _resourceManager.resourceStateList) diff --git a/Mate.Production.Core/Agents/HubAgent/Behaviour/Default.cs b/Mate.Production.Core/Agents/HubAgent/Behaviour/Default.cs index 8de29bf1..b4f3b398 100644 --- a/Mate.Production.Core/Agents/HubAgent/Behaviour/Default.cs +++ b/Mate.Production.Core/Agents/HubAgent/Behaviour/Default.cs @@ -21,8 +21,6 @@ public Default(long maxBucketSize, WorkTimeGenerator workTimeGenerator, Simulati } internal CapabilityManager _capabilityManager { get; set; } = new CapabilityManager(); internal ProposalManager _proposalManager { get; set; } = new ProposalManager(); - - internal StabilityManager _stabilityManager { get; set; } = new StabilityManager(); private BucketManager _bucketManager { get; } private WorkTimeGenerator _workTimeGenerator { get; } public override bool Action(object message) diff --git a/Mate.Production.Core/Agents/HubAgent/Types/OperationPosition.cs b/Mate.Production.Core/Agents/HubAgent/Types/OperationPosition.cs deleted file mode 100644 index 3a0db74f..00000000 --- a/Mate.Production.Core/Agents/HubAgent/Types/OperationPosition.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Mate.Production.Core.Agents.HubAgent.Types -{ - internal class OperationPosition : Tuple - { - public OperationPosition(int item1, string item2) : base(item1, item2) - { - - } - } -} diff --git a/Mate.Production.Core/Agents/HubAgent/Types/StabilityManager.cs b/Mate.Production.Core/Agents/HubAgent/Types/StabilityManager.cs deleted file mode 100644 index 76b54bff..00000000 --- a/Mate.Production.Core/Agents/HubAgent/Types/StabilityManager.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using static FBuckets; - -namespace Mate.Production.Core.Agents.HubAgent.Types -{ - internal class StabilityManager : Dictionary> - { - void AddEntryForBucket(FBucket bucket, int position, string resource) - { - foreach(var operation in bucket.Operations) - { - AddEntryForOperation(operation.Key, position, resource); - } - } - - void AddEntryForOperation(Guid operationKey, int position, string resource) - { - OperationPosition operationPosition = new(position, resource); - - if (this.TryGetValue(operationKey, out var operationPositionList)) - { - operationPositionList.Add(operationPosition); - } - else - { - this.Add(operationKey, new List((IEnumerable)operationPosition)); - } - } - - - //Anything to export to csv whatever - - //Create mean over values - - - } -} diff --git a/Mate.Production.Core/Agents/ResourceAgent/Behaviour/Default.cs b/Mate.Production.Core/Agents/ResourceAgent/Behaviour/Default.cs index fb94671c..949de931 100644 --- a/Mate.Production.Core/Agents/ResourceAgent/Behaviour/Default.cs +++ b/Mate.Production.Core/Agents/ResourceAgent/Behaviour/Default.cs @@ -5,13 +5,16 @@ using Mate.DataCore.DataModel; using Mate.DataCore.Nominal; using Mate.DataCore.Nominal.Model; +using Mate.Production.Core.Agents.CollectorAgent.Types; using Mate.Production.Core.Agents.HubAgent; +using Mate.Production.Core.Agents.HubAgent.Types; using Mate.Production.Core.Agents.JobAgent; using Mate.Production.Core.Agents.ResourceAgent.Types; using Mate.Production.Core.Agents.ResourceAgent.Types.TimeConstraintQueue; using Mate.Production.Core.Helper; using Mate.Production.Core.Helper.DistributionProvider; using Mate.Production.Core.Types; +using static FBuckets; using static FResourceInformations; using Directory = Mate.Production.Core.Agents.DirectoryAgent.Directory; using LogLevel = NLog.LogLevel; @@ -114,9 +117,10 @@ internal void SetHubAgent(IActorRef hubAgent) private void RevokeJob(Guid jobKey) { - var revokedJob = _jobInProgress.RevokeJob(jobKey); + var (position, revokedJob) = _jobInProgress.RevokeJob(jobKey); if (revokedJob != null) { + AddToStabilityManager(revokedJob, position, Process.Dequeue); Agent.DebugMessage(msg: $"Revoking Job from Processing {revokedJob.Job.Name} {revokedJob.Job.Key}", CustomLogger.JOB, LogLevel.Warn); Agent.Send(instruction: Job.Instruction.AcknowledgeRevoke.Create(message: Agent.Context.Self, target: revokedJob.JobAgentRef)); UpdateProcessingItem(); @@ -217,6 +221,7 @@ internal void AcceptProposals(IConfirmations.IConfirmation jobConfirmation) this.UpdateAndRequeuePlanedJobs(jobConfirmation); _scopeQueue.Enqueue(jobConfirmation); + JobToStabilityManager(new List() { jobConfirmation }, Process.Enqueue); Agent.DebugMessage(msg: $"Accepted proposal on resource {Agent.Context.Self.Path.Name} and " + $"start enqueue {jobConfirmation.Job.Name} {jobConfirmation.Key} queueCount: {_scopeQueue.Count}" + @@ -445,16 +450,21 @@ private void RequeueJobs(HashSet toRequeue) { Agent.DebugMessage(msg: $"Remove {toRequeue.Count} from {Agent.Context.Self.Path.Name}", CustomLogger.JOB, LogLevel.Warn); + if(toRequeue.Count > 0) + JobToStabilityManager(toRequeue.ToList(), Process.Dequeue); + foreach (var job in toRequeue) { Agent.DebugMessage(msg: $"Remove for requeue {job.Job.Name} {job.Key} from {Agent.Context.Self.Path.Name}", CustomLogger.JOB, LogLevel.Warn); + _scopeQueue.RemoveJob(job); Agent.Send(instruction: Job.Instruction.StartRequeue.Create(target: job.JobAgentRef)); } } -#endregion -#region Reporting + #endregion + + #region Reporting void CreateProcessingTask(FOperations.FOperation item) { @@ -488,7 +498,34 @@ void CreateSetupTask(long gap, string type) Agent.Context.System.EventStream.Publish(@event: pub); } -#endregion + private void JobToStabilityManager(List jobs, Process process) + { + foreach (var job in jobs) + { + int position = _jobInProgress.GetTotalOperationsOfJobInProgress + ((TimeConstraintQueue)_scopeQueue).IndexOfKey(job.ScopeConfirmation.GetScopeStart()); + AddToStabilityManager(job, position, process); + } + } + private void AddToStabilityManager(IConfirmations.IConfirmation job, int position, Process process) + { + if (_resourceType != ResourceType.Workcenter) + return; + + var operationKeys = ((FBucket)job.Job).Operations.Select(o => o.Key.ToString()).ToList(); + var pub = new FCreateStabilityMeasurements.FCreateStabilityMeasurement( + keys: operationKeys + , time: Agent.CurrentTime + , position: position + , resource: Agent.Name.ToString() + , start: job.ScopeConfirmation.GetScopeStart() + , process: process.ToString() + ); + + Agent.Context.System.EventStream.Publish(@event: pub); + + } + + #endregion } } diff --git a/Mate.Production.Core/Agents/ResourceAgent/Types/JobInProgress.cs b/Mate.Production.Core/Agents/ResourceAgent/Types/JobInProgress.cs index 8ac59b12..3efc0b1f 100644 --- a/Mate.Production.Core/Agents/ResourceAgent/Types/JobInProgress.cs +++ b/Mate.Production.Core/Agents/ResourceAgent/Types/JobInProgress.cs @@ -24,8 +24,9 @@ public class JobInProgress public bool IsWorking {get; private set; } = false; private Queue _finalOperations { get; set; } = new Queue(); public bool ResetIsWorking() => IsWorking = false; + public int HasCurrent=> Current != null ? 1 : 0; - #region Passthrough Properties + #region Passthrough Properties public long JobDuration => Current.Job.Duration; public long JobMaxDuration => ((FBucket) Current.Job).MaxBucketSize; public int ResourceCapabilityId => Current.CapabilityProvider.ResourceCapabilityId; @@ -38,6 +39,7 @@ public class JobInProgress public List GanttItems => this.ReadyElements.Values.ToList(); public bool IsCurrentDelayed(long currentTime) => Current.ScopeConfirmation.GetScopeStart() < currentTime; public M_ResourceCapabilityProvider CapabilityProvider => Current.CapabilityProvider; + public int GetTotalOperationsOfJobInProgress => ReadyElements.Count + HasCurrent; #endregion public void StartProcessing(long currentTime, long duration) @@ -101,19 +103,28 @@ public void Reset() _finalOperations = new (); } - public IConfirmation RevokeJob(Guid confirmationKey) + public (int, IConfirmation) RevokeJob(Guid confirmationKey) { if (IsSet && Current.Key.Equals(confirmationKey)) { var rev = Current; Reset(); - return rev; + return (0, rev); } var (key, revoked) = ReadyElements.FirstOrDefault(x => x.Value.Key.Equals(confirmationKey)); - if (revoked == null) return null; + if (revoked == null) return (0, null); ReadyElements.Remove(key); - return revoked; + return (JobPosition(revoked), revoked); + } + + public int JobPosition(IConfirmation job) + { + var position = 0; + if (IsSet) + position = position + 1; + position = position + ReadyElements.IndexOfKey(job.ScopeConfirmation.GetScopeStart()); + return position; } public void Add(IConfirmation confirmation) diff --git a/Mate.Production.Core/Mate.Production.Core.csproj b/Mate.Production.Core/Mate.Production.Core.csproj index 52ba3f08..d99798b1 100644 --- a/Mate.Production.Core/Mate.Production.Core.csproj +++ b/Mate.Production.Core/Mate.Production.Core.csproj @@ -11,12 +11,12 @@ - + diff --git a/Mate.Production.Immutables/Mate.Production.Immutables.fsproj b/Mate.Production.Immutables/Mate.Production.Immutables.fsproj index 482c04dd..3ce40b44 100644 --- a/Mate.Production.Immutables/Mate.Production.Immutables.fsproj +++ b/Mate.Production.Immutables/Mate.Production.Immutables.fsproj @@ -59,6 +59,7 @@ + diff --git a/Mate.Production.Immutables/Reporting/FCreateStabilityMeasurements.fs b/Mate.Production.Immutables/Reporting/FCreateStabilityMeasurements.fs new file mode 100644 index 00000000..ffb18194 --- /dev/null +++ b/Mate.Production.Immutables/Reporting/FCreateStabilityMeasurements.fs @@ -0,0 +1,12 @@ +module FCreateStabilityMeasurements + +open System + + type public FCreateStabilityMeasurement = { + Keys : ResizeArray + Resource : string + Time : int64 + Position : int + Start : int64 + Process : string + } diff --git a/Mate.Test/SimulationEnvironment/AgentSystem.cs b/Mate.Test/SimulationEnvironment/AgentSystem.cs index 7d1529ce..e653308e 100644 --- a/Mate.Test/SimulationEnvironment/AgentSystem.cs +++ b/Mate.Test/SimulationEnvironment/AgentSystem.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -14,6 +15,7 @@ using Mate.DataCore.Nominal.Model; using Mate.Production.CLI; using Mate.Production.Core; +using Mate.Production.Core.Agents.CollectorAgent.Types; using Mate.Production.Core.Environment.Options; using Mate.Production.Core.Helper; using Microsoft.EntityFrameworkCore; @@ -106,6 +108,14 @@ public void ReadRawSQL() } + [Fact] + public void TestStatistics() + { + StabilityManager.Instance.ReadFile(); + + Assert.True(true, "yes"); + } + // [Fact(Skip = "MANUAL USE ONLY --> to reset Remote DB")] [Fact] public void ResetAllDatabase() @@ -215,28 +225,30 @@ public static IEnumerable GetTestData() [Theory] //[InlineData(SimulationType.Default, 1700, 0.00)] - [InlineData(SimulationType.Default, 1705, 0.05)] - [InlineData(SimulationType.Default, 1710, 0.10)] - [InlineData(SimulationType.Default, 1715, 0.15)] - //[InlineData(SimulationType.Default, 1720, 0.20)] - [InlineData(SimulationType.Default, 1725, 0.25)] - [InlineData(SimulationType.Default, 1730, 0.30)] - [InlineData(SimulationType.Default, 1735, 0.35)] - [InlineData(SimulationType.Central, 2700, 0.00)] - [InlineData(SimulationType.Central, 2705, 0.05)] - [InlineData(SimulationType.Central, 2710, 0.10)] - [InlineData(SimulationType.Central, 2715, 0.15)] - [InlineData(SimulationType.Central, 2720, 0.20)] - [InlineData(SimulationType.Central, 2725, 0.25)] - [InlineData(SimulationType.Central, 2730, 0.30)] - [InlineData(SimulationType.Central, 2735, 0.35)] + //[InlineData(SimulationType.Default, 11, 0.00)] + //[InlineData(SimulationType.Default, 12, 0.05)] + //[InlineData(SimulationType.Default, 13, 0.10)] + //[InlineData(SimulationType.Default, 14, 0.15)] + //[InlineData(SimulationType.Default, 15, 0.20)] + //[InlineData(SimulationType.Default, 16, 0.25)] + //[InlineData(SimulationType.Default, 17, 0.30)] + //[InlineData(SimulationType.Default, 18, 0.35)] + + //[InlineData(SimulationType.Central, 21, 0.00)] + //[InlineData(SimulationType.Central, 22, 0.05)] + //[InlineData(SimulationType.Central, 23, 0.10)] + [InlineData(SimulationType.Central, 24, 0.15)] + //[InlineData(SimulationType.Central, 25, 0.20)] + //[InlineData(SimulationType.Central, 26, 0.25)] + //[InlineData(SimulationType.Central, 27, 0.30)] + [InlineData(SimulationType.Central, 28, 0.35)] public async Task AgentSystemTest(SimulationType simulationType, int simNr, double deviation) { - //var simNr = 2; + //var simNr = Random.Shared.Next(); //var simulationType = SimulationType.Default; var seed = 169; var throughput = 1920; - var arrivalRate = 0.035; + var arrivalRate = 0.030; //LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Trace, LogLevel.Trace); LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Info, LogLevel.Info); @@ -257,7 +269,7 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub //dbResult.DbContext.Database.EnsureDeleted(); //dbResult.DbContext.Database.EnsureCreated(); //ResultDBInitializerBasic.DbInitialize(dbResult.DbContext); - + seedInitializer.GenerateTestData(TestMateDb); //dbMaster.DbContext.Database.EnsureDeleted(); @@ -310,7 +322,7 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub ganttPlanContext.DbContext.Database.ExecuteSqlRaw("EXEC sp_MSforeachtable 'DELETE FROM ? '"); //Synchronisation GanttPlan - GanttPlanOptRunner.RunOptAndExport("Init", "C:\\Users\\admin\\GANTTPLAN\\GanttPlanOptRunner.exe"); + GanttPlanOptRunner.RunOptAndExport("Init", "D:\\Work\\GANTTPLAN\\GanttPlanOptRunner.exe"); simContext = new GanttSimulation(dbName: TestMateDb, messageHub: new ConsoleHub()); @@ -365,7 +377,6 @@ private void ClearResultDBby(SimulationNumber simNr, string dbName) } } - [Fact] private void TestDbms() { diff --git a/Mate.sln b/Mate.sln index d5fb6131..b2ea2fbe 100644 --- a/Mate.sln +++ b/Mate.sln @@ -15,6 +15,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mate.Production.Core", "Mat EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Mate.Production.Immutables", "Mate.Production.Immutables\Mate.Production.Immutables.fsproj", "{8842516A-909A-48A2-8062-CD87129DE81A}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AkkaSim", "..\..\AkkaSim\AkkaSim\AkkaSim.csproj", "{3F7E91D5-F7E8-47DB-8F34-272D1569B89F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -175,6 +177,30 @@ Global {8842516A-909A-48A2-8062-CD87129DE81A}.Release|x64.Build.0 = Release|Any CPU {8842516A-909A-48A2-8062-CD87129DE81A}.Release|x86.ActiveCfg = Release|x86 {8842516A-909A-48A2-8062-CD87129DE81A}.Release|x86.Build.0 = Release|x86 + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debug|x64.ActiveCfg = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debug|x64.Build.0 = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debug|x86.ActiveCfg = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debug|x86.Build.0 = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debuger|Any CPU.ActiveCfg = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debuger|Any CPU.Build.0 = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debuger|x64.ActiveCfg = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debuger|x64.Build.0 = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debuger|x86.ActiveCfg = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debuger|x86.Build.0 = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debugger|Any CPU.ActiveCfg = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debugger|Any CPU.Build.0 = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debugger|x64.ActiveCfg = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debugger|x64.Build.0 = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debugger|x86.ActiveCfg = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debugger|x86.Build.0 = Debug|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Release|Any CPU.Build.0 = Release|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Release|x64.ActiveCfg = Release|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Release|x64.Build.0 = Release|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Release|x86.ActiveCfg = Release|Any CPU + {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From eee4d3ecc9a631e334d43b8b7b5d122f606567ea Mon Sep 17 00:00:00 2001 From: MarvinMat <38523923+MarvinMat@users.noreply.github.com> Date: Fri, 10 Jun 2022 17:44:21 +0200 Subject: [PATCH 03/16] * add some distance measurement to statistics * fix queueing --- Mate.Production.Core/AgentContinuation.cs | 2 +- .../CollectorAgent/Collector.Analytics.Job.cs | 7 +- .../CollectorAgent/Types/StabilityManager.cs | 22 +++++- .../Agents/ResourceAgent/Behaviour/Default.cs | 26 +++++-- .../ResourceAgent/Types/JobInProgress.cs | 76 ++++++++++++++++++- .../TimeConstraintQueue.cs | 31 ++++++++ .../SimulationEnvironment/AgentSystem.cs | 49 ++++++------ 7 files changed, 172 insertions(+), 41 deletions(-) diff --git a/Mate.Production.Core/AgentContinuation.cs b/Mate.Production.Core/AgentContinuation.cs index dff61b46..1e507e35 100644 --- a/Mate.Production.Core/AgentContinuation.cs +++ b/Mate.Production.Core/AgentContinuation.cs @@ -53,7 +53,7 @@ public override void SimulationIsTerminating(Simulation sim) foreach (var item in _collectorRefs) { item.Ask(message: UpdateLiveFeed.Create(setup: true, target: _inbox.Receiver) - , timeout: TimeSpan.FromHours(value: 1)).Wait(); + , timeout: TimeSpan.FromMinutes(value: 5)).Wait(); } sim.ActorSystem.Terminate().Wait(); _logger.Log(LogLevel.Info, $"Simulation run for { sim.ActorSystem.Uptime } and ended!"); diff --git a/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs b/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs index 4dae00c2..a2f2c165 100644 --- a/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs +++ b/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs @@ -99,6 +99,8 @@ public bool EventHandle(SimulationMonitor simulationMonitor, object message) private void CreateStabilityMeasurements(FCreateStabilityMeasurement m) { + StabilityManager.Instance.AddEntryForOperation(operationKey: m.Keys.First(), time: m.Time, position: m.Position, resource: m.Resource, start: m.Start, process: m.Process); + StabilityManager.Instance.AddEntryForBucket(m.Keys, time: m.Time, position: m.Position, resource: m.Resource, start: m.Start, process: m.Process); } @@ -205,12 +207,11 @@ private void CallAverageIdle(bool finalCall) private void WriteOperationKeys(bool finalCall) { - if (finalCall) + if (finalCall && StabilityManager.Instance.HasEntries) { + //StabilityManager.Instance.WriteFile(Collector.Config.GetOption().Value); var keyValueDic = StabilityManager.Instance.DoSomeStatistics(Collector.Config.GetOption().Value, Collector.Config.GetOption().Value); - Collector.Kpis.AddRange(keyValueDic); - //StabilityManager.Instance.WriteFile(Collector.Config.GetOption().Value); } } diff --git a/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs b/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs index 36c0970b..b39b9636 100644 --- a/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs +++ b/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs @@ -17,6 +17,8 @@ private static readonly Lazy lazyStabilityManager private Dictionary> OperationDictionary = new Dictionary>(); + public bool HasEntries => OperationDictionary.Count > 0; + public void AddEntryForBucket(List keys, long time, int position, string resource, long start, string process) { foreach (var key in keys) @@ -67,6 +69,8 @@ public List DoSomeStatistics(int simNum=1, SimulationType simType = Simulat Dictionary averagePosition = new(); + Dictionary> averageDistanctPosition = new(); + //Central foreach (KeyValuePair> entry in OperationDictionary) @@ -82,14 +86,18 @@ public List DoSomeStatistics(int simNum=1, SimulationType simType = Simulat result++; - averageList.Add(Math.Abs(actual.Start - next.Start)); + var distance = Math.Abs(actual.Start - next.Start); + averageList.Add(distance); + if(averagePosition.TryGetValue(actual.Position, out var amount)) { averagePosition[actual.Position] = amount+1; + averageDistanctPosition[actual.Position].Add(distance); } else { averagePosition.Add(actual.Position, 1); + averageDistanctPosition.Add(actual.Position, new List() { distance}); } @@ -106,13 +114,19 @@ public List DoSomeStatistics(int simNum=1, SimulationType simType = Simulat keyValuePairs.Add(CreateKpi("RatioUselessReplan", Math.Round(((double)counter / (double)result) * 100, 2), simNum, simType)); keyValuePairs.Add(CreateKpi("AverageTimeSpan", averageList.Average(), simNum, simType)); - System.Diagnostics.Debug.WriteLine($"{counter} entries of {result}: {Math.Round(((double)counter/(double)result)*100,2)}%"); - System.Diagnostics.Debug.WriteLine($"Average timespan change {averageList.Average()}"); + //System.Diagnostics.Debug.WriteLine($"{counter} entries of {result}: {Math.Round(((double)counter/(double)result)*100,2)}%"); + //System.Diagnostics.Debug.WriteLine($"Average timespan change {averageList.Average()}"); foreach (var positon in averagePosition.OrderBy(x => x.Key)) { keyValuePairs.Add((CreateKpi($"Position: {positon.Key}", positon.Value, simNum, simType))); - System.Diagnostics.Debug.WriteLine($"Position: {positon.Key} | {positon.Value}"); + //System.Diagnostics.Debug.WriteLine($"Position: {positon.Key} | {positon.Value}"); + } + + foreach (var distance in averageDistanctPosition.OrderBy(x => x.Key)) + { + keyValuePairs.Add((CreateKpi($"DistancePosition: {distance.Key}", distance.Value.Average(), simNum, simType))); + //System.Diagnostics.Debug.WriteLine($"DIstancePosition: {distance.Key} | {distance.Value.Average()}"); } return keyValuePairs; diff --git a/Mate.Production.Core/Agents/ResourceAgent/Behaviour/Default.cs b/Mate.Production.Core/Agents/ResourceAgent/Behaviour/Default.cs index 949de931..8307c853 100644 --- a/Mate.Production.Core/Agents/ResourceAgent/Behaviour/Default.cs +++ b/Mate.Production.Core/Agents/ResourceAgent/Behaviour/Default.cs @@ -120,7 +120,11 @@ private void RevokeJob(Guid jobKey) var (position, revokedJob) = _jobInProgress.RevokeJob(jobKey); if (revokedJob != null) { - AddToStabilityManager(revokedJob, position, Process.Dequeue); + foreach(var element in ((FBucket)revokedJob.Job).Operations) + { + (var duration, var opPosition) = _jobInProgress.GetTotalOperationsOfJobInProgress(element.Key,Agent.CurrentTime); + AddToStabilityManager(element.Key, revokedJob.ScopeConfirmation.GetScopeStart() + duration, opPosition, Process.Dequeue); + } Agent.DebugMessage(msg: $"Revoking Job from Processing {revokedJob.Job.Name} {revokedJob.Job.Key}", CustomLogger.JOB, LogLevel.Warn); Agent.Send(instruction: Job.Instruction.AcknowledgeRevoke.Create(message: Agent.Context.Self, target: revokedJob.JobAgentRef)); UpdateProcessingItem(); @@ -502,22 +506,32 @@ private void JobToStabilityManager(List jobs, Proc { foreach (var job in jobs) { - int position = _jobInProgress.GetTotalOperationsOfJobInProgress + ((TimeConstraintQueue)_scopeQueue).IndexOfKey(job.ScopeConfirmation.GetScopeStart()); - AddToStabilityManager(job, position, process); + foreach (var op in ((FBucket)job.Job).Operations) + { + (var duration, var opposition) = ((TimeConstraintQueue)_scopeQueue).GetPositionOfJobInJob(job.ScopeConfirmation.GetScopeStart(), operationId: op.Key, currentTime:Agent.CurrentTime); + + + int position = + _jobInProgress.GetTotalOperationsOfJobInProgress() + + ((TimeConstraintQueue)_scopeQueue).GetAmountOfPreviousOperations(job.ScopeConfirmation.GetScopeStart()) + + opposition; + AddToStabilityManager(op.Key, job.ScopeConfirmation.GetScopeStart() + duration, position, process); + + } } } - private void AddToStabilityManager(IConfirmations.IConfirmation job, int position, Process process) + private void AddToStabilityManager(Guid key, long scopeStart, int position, Process process) { if (_resourceType != ResourceType.Workcenter) return; - var operationKeys = ((FBucket)job.Job).Operations.Select(o => o.Key.ToString()).ToList(); + var operationKeys = new List() { key.ToString() }; var pub = new FCreateStabilityMeasurements.FCreateStabilityMeasurement( keys: operationKeys , time: Agent.CurrentTime , position: position , resource: Agent.Name.ToString() - , start: job.ScopeConfirmation.GetScopeStart() + , start: scopeStart , process: process.ToString() ); diff --git a/Mate.Production.Core/Agents/ResourceAgent/Types/JobInProgress.cs b/Mate.Production.Core/Agents/ResourceAgent/Types/JobInProgress.cs index 3efc0b1f..c2d7ef76 100644 --- a/Mate.Production.Core/Agents/ResourceAgent/Types/JobInProgress.cs +++ b/Mate.Production.Core/Agents/ResourceAgent/Types/JobInProgress.cs @@ -6,6 +6,7 @@ using static FBuckets; using static FOperations; using static IConfirmations; +using static IJobs; namespace Mate.Production.Core.Agents.ResourceAgent.Types { @@ -39,7 +40,78 @@ public class JobInProgress public List GanttItems => this.ReadyElements.Values.ToList(); public bool IsCurrentDelayed(long currentTime) => Current.ScopeConfirmation.GetScopeStart() < currentTime; public M_ResourceCapabilityProvider CapabilityProvider => Current.CapabilityProvider; - public int GetTotalOperationsOfJobInProgress => ReadyElements.Count + HasCurrent; + public int GetTotalOperationsOfJobInProgress() + { + int operations = 0; + int durationOperations = 0; + if (ReadyElements.Count > 0) + { + foreach (var element in ReadyElements) + { + operations += ((FBucket)element.Value.Job).Operations.Count(); + } + } + if(HasCurrent == 1) + { + operations += ((FBucket)Current.Job).Operations.Count(); + } + + return operations; + } + + public (int, int) GetTotalOperationsOfJobInProgress(Guid operationId, long currentTime) + { + int operations = 0; + int durationOperations = 0; + IJob operation = null; + + if (HasCurrent == 1) + operation = ((FBucket)Current.Job).Operations.SingleOrDefault(x => x.Key.Equals(operationId)) as IJob; + + //Wenn es in dem aktuellen Element ist + if (operation != null) + { + var jobPrio = operation.Priority(currentTime); + operations += ((FBucket)Current.Job).Operations.Count(x => ((IJob)x).Priority(currentTime) < jobPrio); + durationOperations += ((FBucket)Current.Job).Operations.Where(x => ((IJob)x).Priority(currentTime) < jobPrio).Sum(y => y.Operation.Duration); + } + //Ansonsten, wenn es in den ReadyElementen ist + else + { + if (HasCurrent == 1) + { + operations += ((FBucket)Current.Job).Operations.Count(); + } + IJob element = null; + for (int i = 0; i < ReadyElements.Count(); i++) + { + //Gehe solange über die Liste, bis du das Element in den Operationen gefunden hast + while(element == null) + { + element = ((FBucket)ReadyElements[i].Job).Operations.SingleOrDefault(x => x.Key.Equals(operationId)); + + //Wenn das Element noch nicht in der Liste ist, nimm alle Operationen aus dieser Liste + if (element == null) + { + operations += ((FBucket)ReadyElements[i].Job).Operations.Count(); + continue; + } + + var jobPrio = element.Priority(currentTime); + operations += ((FBucket)ReadyElements[i].Job).Operations.Count(x => ((IJob)x).Priority(currentTime) < jobPrio); + durationOperations += ((FBucket)ReadyElements[i].Job).Operations.Where(x => ((IJob)x).Priority(currentTime) < jobPrio).Sum(y => y.Operation.Duration); + + } + + } + + } + + return (durationOperations, operations); + } + + + #endregion public void StartProcessing(long currentTime, long duration) @@ -122,7 +194,7 @@ public int JobPosition(IConfirmation job) { var position = 0; if (IsSet) - position = position + 1; + position = position + ((FBucket)Current.Job).Operations.Count(); position = position + ReadyElements.IndexOfKey(job.ScopeConfirmation.GetScopeStart()); return position; } diff --git a/Mate.Production.Core/Agents/ResourceAgent/Types/TimeConstraintQueue/TimeConstraintQueue.cs b/Mate.Production.Core/Agents/ResourceAgent/Types/TimeConstraintQueue/TimeConstraintQueue.cs index 520562cf..fdc313fb 100644 --- a/Mate.Production.Core/Agents/ResourceAgent/Types/TimeConstraintQueue/TimeConstraintQueue.cs +++ b/Mate.Production.Core/Agents/ResourceAgent/Types/TimeConstraintQueue/TimeConstraintQueue.cs @@ -9,6 +9,7 @@ using static FScopes; using static IConfirmations; using static IJobs; +using static FScopeConfirmations; namespace Mate.Production.Core.Agents.ResourceAgent.Types.TimeConstraintQueue { @@ -16,6 +17,7 @@ public class TimeConstraintQueue : SortedList, IJobQueue { public long Limit { get; set; } public long Workload => this.Values.Sum(x => x.Job.Duration); + public TimeConstraintQueue(long limit) { Limit = limit; @@ -346,6 +348,35 @@ public bool QueueHealthCheck(long currentTime) } + public int GetAmountOfPreviousOperations(long scopeStart) + { + int operations = 0; + var index = this.IndexOfKey(scopeStart); + + foreach(var element in this.Where(x => x.Key < index)) + { + operations += ((FBucket)element.Value.Job).Operations.Count(); + + } + + return operations; + } + + public (long, int) GetPositionOfJobInJob(long scopeStart, Guid operationId, long currentTime) + { + int operations = 0; + long duration = 0; + var bucket = ((FBucket)this[scopeStart].Job); + var operation = bucket.Operations.Single(x => x.Key == operationId) as IJob; + foreach (var element in bucket.Operations.Cast().Where(x => x.Priority(currentTime) < operation.Priority(currentTime))) + { + operations++; + duration += element.Duration; + } + + return (duration, operations); + } + } } diff --git a/Mate.Test/SimulationEnvironment/AgentSystem.cs b/Mate.Test/SimulationEnvironment/AgentSystem.cs index e653308e..6f2fe438 100644 --- a/Mate.Test/SimulationEnvironment/AgentSystem.cs +++ b/Mate.Test/SimulationEnvironment/AgentSystem.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Security.Cryptography; using System.Threading.Tasks; using Akka.TestKit.Xunit; using AkkaSim.Logging; @@ -224,29 +225,28 @@ public static IEnumerable GetTestData() //public async Task SystemTestAsync(SimulationType simulationType, PriorityRule priorityRule, int simNr, int maxBucketSize, long throughput, int seed , ModelSize resourceModelSize, ModelSize setupModelSize, double arrivalRate, bool distributeSetupsExponentially, bool createMeasurements = false) [Theory] - //[InlineData(SimulationType.Default, 1700, 0.00)] - //[InlineData(SimulationType.Default, 11, 0.00)] - //[InlineData(SimulationType.Default, 12, 0.05)] - //[InlineData(SimulationType.Default, 13, 0.10)] - //[InlineData(SimulationType.Default, 14, 0.15)] - //[InlineData(SimulationType.Default, 15, 0.20)] - //[InlineData(SimulationType.Default, 16, 0.25)] - //[InlineData(SimulationType.Default, 17, 0.30)] - //[InlineData(SimulationType.Default, 18, 0.35)] - - //[InlineData(SimulationType.Central, 21, 0.00)] - //[InlineData(SimulationType.Central, 22, 0.05)] - //[InlineData(SimulationType.Central, 23, 0.10)] - [InlineData(SimulationType.Central, 24, 0.15)] - //[InlineData(SimulationType.Central, 25, 0.20)] - //[InlineData(SimulationType.Central, 26, 0.25)] - //[InlineData(SimulationType.Central, 27, 0.30)] - [InlineData(SimulationType.Central, 28, 0.35)] + [InlineData(SimulationType.Queuing, 613, 0.05)] + //[InlineData(SimulationType.Default, 502, 0.10)] + //[InlineData(SimulationType.Default, 503, 0.15)] + //[InlineData(SimulationType.Default, 204, 0.10)] + //[InlineData(SimulationType.Default, 205, 0.10)] + //[InlineData(SimulationType.Default, 206, 0.10)] + //[InlineData(SimulationType.Default, 207, 0.10)] + //[InlineData(SimulationType.Default, 208, 0.10)] + + //[InlineData(SimulationType.Central, 201, 0.00)] + //[InlineData(SimulationType.Central, 202, 0.05)] + //[InlineData(SimulationType.Central, 203, 0.10)] + //[InlineData(SimulationType.Central, 204, 0.15)] + //[InlineData(SimulationType.Central, 205, 0.20)] + //[InlineData(SimulationType.Central, 206, 0.25)] + //[InlineData(SimulationType.Central, 207, 0.30)] + //[InlineData(SimulationType.Central, 208, 0.35)] public async Task AgentSystemTest(SimulationType simulationType, int simNr, double deviation) { //var simNr = Random.Shared.Next(); //var simulationType = SimulationType.Default; - var seed = 169; + var seed = simNr; var throughput = 1920; var arrivalRate = 0.030; @@ -312,11 +312,7 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub BaseSimulation simContext = null; - if (simulationType == SimulationType.Default) - { - simContext = new AgentSimulation(TestMateDb, messageHub: new ConsoleHub()); - } - else + if (simulationType == SimulationType.Central) { var ganttPlanContext = Dbms.GetGanttDataBase(DataBaseConfiguration.GP); ganttPlanContext.DbContext.Database.ExecuteSqlRaw("EXEC sp_MSforeachtable 'DELETE FROM ? '"); @@ -325,7 +321,10 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub GanttPlanOptRunner.RunOptAndExport("Init", "D:\\Work\\GANTTPLAN\\GanttPlanOptRunner.exe"); simContext = new GanttSimulation(dbName: TestMateDb, messageHub: new ConsoleHub()); - + } + else + { + simContext = new AgentSimulation(TestMateDb, messageHub: new ConsoleHub()); } var simulation = await simContext.InitializeSimulation(configuration: simConfig); From e9a74c8e89d44c04081f150d29100cba855d61c3 Mon Sep 17 00:00:00 2001 From: Marcel Ehlers Date: Tue, 20 Sep 2022 17:45:58 +0200 Subject: [PATCH 04/16] Martin PhD Final Round Push --- .../Data/Seed/CapbilityTransformer.cs | 2 +- Mate.DataCore/Mate.DataCore.csproj | 1 + .../Mate.Production.Core.csproj | 1 - .../Mate.Production.Immutables.fsproj | 1 + .../SimulationEnvironment/AgentSystem.cs | 20 +++++++------- Mate.sln | 26 ------------------- 6 files changed, 13 insertions(+), 38 deletions(-) diff --git a/Mate.DataCore/Data/Seed/CapbilityTransformer.cs b/Mate.DataCore/Data/Seed/CapbilityTransformer.cs index 8bacb94f..9094a5d4 100644 --- a/Mate.DataCore/Data/Seed/CapbilityTransformer.cs +++ b/Mate.DataCore/Data/Seed/CapbilityTransformer.cs @@ -25,7 +25,7 @@ public static MasterTableResourceCapability Transform(MateDb mateDb, ResourceCon ToolCount = resourceConfig.GetToolsFor(i).Count, ResourceCount = (int)resourceConfig.ResourceGroupList[i].ResourceQuantity, SetupTime = (int)resourceConfig.GetMeanSetupDurationFor(i, 0).TotalMinutes, - OperatorCount = 2, + OperatorCount = 1, IsBatchAble = false }); diff --git a/Mate.DataCore/Mate.DataCore.csproj b/Mate.DataCore/Mate.DataCore.csproj index 37a0a1ef..f1f9f9b1 100644 --- a/Mate.DataCore/Mate.DataCore.csproj +++ b/Mate.DataCore/Mate.DataCore.csproj @@ -12,6 +12,7 @@ + diff --git a/Mate.Production.Core/Mate.Production.Core.csproj b/Mate.Production.Core/Mate.Production.Core.csproj index d99798b1..c5baef78 100644 --- a/Mate.Production.Core/Mate.Production.Core.csproj +++ b/Mate.Production.Core/Mate.Production.Core.csproj @@ -16,7 +16,6 @@ - diff --git a/Mate.Production.Immutables/Mate.Production.Immutables.fsproj b/Mate.Production.Immutables/Mate.Production.Immutables.fsproj index 3ce40b44..44510838 100644 --- a/Mate.Production.Immutables/Mate.Production.Immutables.fsproj +++ b/Mate.Production.Immutables/Mate.Production.Immutables.fsproj @@ -79,6 +79,7 @@ + diff --git a/Mate.Test/SimulationEnvironment/AgentSystem.cs b/Mate.Test/SimulationEnvironment/AgentSystem.cs index 6f2fe438..14b0fc88 100644 --- a/Mate.Test/SimulationEnvironment/AgentSystem.cs +++ b/Mate.Test/SimulationEnvironment/AgentSystem.cs @@ -225,7 +225,7 @@ public static IEnumerable GetTestData() //public async Task SystemTestAsync(SimulationType simulationType, PriorityRule priorityRule, int simNr, int maxBucketSize, long throughput, int seed , ModelSize resourceModelSize, ModelSize setupModelSize, double arrivalRate, bool distributeSetupsExponentially, bool createMeasurements = false) [Theory] - [InlineData(SimulationType.Queuing, 613, 0.05)] + //[InlineData(SimulationType.Queuing, 613, 0.05)] //[InlineData(SimulationType.Default, 502, 0.10)] //[InlineData(SimulationType.Default, 503, 0.15)] //[InlineData(SimulationType.Default, 204, 0.10)] @@ -234,21 +234,21 @@ public static IEnumerable GetTestData() //[InlineData(SimulationType.Default, 207, 0.10)] //[InlineData(SimulationType.Default, 208, 0.10)] - //[InlineData(SimulationType.Central, 201, 0.00)] - //[InlineData(SimulationType.Central, 202, 0.05)] - //[InlineData(SimulationType.Central, 203, 0.10)] - //[InlineData(SimulationType.Central, 204, 0.15)] - //[InlineData(SimulationType.Central, 205, 0.20)] - //[InlineData(SimulationType.Central, 206, 0.25)] - //[InlineData(SimulationType.Central, 207, 0.30)] - //[InlineData(SimulationType.Central, 208, 0.35)] + [InlineData(SimulationType.Queuing, 221, 0.00)] + [InlineData(SimulationType.Queuing, 222, 0.05)] + [InlineData(SimulationType.Queuing, 223, 0.10)] + [InlineData(SimulationType.Queuing, 224, 0.15)] + [InlineData(SimulationType.Queuing, 225, 0.20)] + [InlineData(SimulationType.Queuing, 226, 0.25)] + [InlineData(SimulationType.Queuing, 227, 0.30)] + [InlineData(SimulationType.Queuing, 228, 0.35)] public async Task AgentSystemTest(SimulationType simulationType, int simNr, double deviation) { //var simNr = Random.Shared.Next(); //var simulationType = SimulationType.Default; var seed = simNr; var throughput = 1920; - var arrivalRate = 0.030; + var arrivalRate = 0.035; //LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Trace, LogLevel.Trace); LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Info, LogLevel.Info); diff --git a/Mate.sln b/Mate.sln index b2ea2fbe..d5fb6131 100644 --- a/Mate.sln +++ b/Mate.sln @@ -15,8 +15,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mate.Production.Core", "Mat EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Mate.Production.Immutables", "Mate.Production.Immutables\Mate.Production.Immutables.fsproj", "{8842516A-909A-48A2-8062-CD87129DE81A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AkkaSim", "..\..\AkkaSim\AkkaSim\AkkaSim.csproj", "{3F7E91D5-F7E8-47DB-8F34-272D1569B89F}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -177,30 +175,6 @@ Global {8842516A-909A-48A2-8062-CD87129DE81A}.Release|x64.Build.0 = Release|Any CPU {8842516A-909A-48A2-8062-CD87129DE81A}.Release|x86.ActiveCfg = Release|x86 {8842516A-909A-48A2-8062-CD87129DE81A}.Release|x86.Build.0 = Release|x86 - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debug|x64.ActiveCfg = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debug|x64.Build.0 = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debug|x86.ActiveCfg = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debug|x86.Build.0 = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debuger|Any CPU.ActiveCfg = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debuger|Any CPU.Build.0 = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debuger|x64.ActiveCfg = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debuger|x64.Build.0 = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debuger|x86.ActiveCfg = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debuger|x86.Build.0 = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debugger|Any CPU.ActiveCfg = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debugger|Any CPU.Build.0 = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debugger|x64.ActiveCfg = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debugger|x64.Build.0 = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debugger|x86.ActiveCfg = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Debugger|x86.Build.0 = Debug|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Release|Any CPU.Build.0 = Release|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Release|x64.ActiveCfg = Release|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Release|x64.Build.0 = Release|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Release|x86.ActiveCfg = Release|Any CPU - {3F7E91D5-F7E8-47DB-8F34-272D1569B89F}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From d22ca43263f3a242e771f73715d5afdbbbada765 Mon Sep 17 00:00:00 2001 From: Marcel Ehlers Date: Tue, 20 Sep 2022 17:47:20 +0200 Subject: [PATCH 05/16] update SeedNumber to static 169 --- Mate.Test/SimulationEnvironment/AgentSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mate.Test/SimulationEnvironment/AgentSystem.cs b/Mate.Test/SimulationEnvironment/AgentSystem.cs index 14b0fc88..6b2b3e29 100644 --- a/Mate.Test/SimulationEnvironment/AgentSystem.cs +++ b/Mate.Test/SimulationEnvironment/AgentSystem.cs @@ -246,7 +246,7 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub { //var simNr = Random.Shared.Next(); //var simulationType = SimulationType.Default; - var seed = simNr; + var seed = 169; var throughput = 1920; var arrivalRate = 0.035; From 100e69143e48dae51567c816fe46c5935ae2bcd4 Mon Sep 17 00:00:00 2001 From: MarvinMat <38523923+MarvinMat@users.noreply.github.com> Date: Wed, 21 Sep 2022 14:55:14 +0200 Subject: [PATCH 06/16] Bugfix: RandomWorkTime * add Math.Round --- .../DistributionProvider/WorkTimeGenerator.cs | 2 +- .../SimulationEnvironment/AgentSystem.cs | 92 +++++++++++++++++-- .../SimulationEnvironment/CentralSystem.cs | 10 +- 3 files changed, 93 insertions(+), 11 deletions(-) diff --git a/Mate.Production.Core/Helper/DistributionProvider/WorkTimeGenerator.cs b/Mate.Production.Core/Helper/DistributionProvider/WorkTimeGenerator.cs index 8a1eea3b..743c0f53 100644 --- a/Mate.Production.Core/Helper/DistributionProvider/WorkTimeGenerator.cs +++ b/Mate.Production.Core/Helper/DistributionProvider/WorkTimeGenerator.cs @@ -42,7 +42,7 @@ public long GetRandomWorkTime(long duration) long newDuration; while (true) { - newDuration = (long)LogNormal.WithMeanVariance(duration, duration * _deviation, _sourceRandom).Sample(); + newDuration = (long)Math.Round(LogNormal.WithMeanVariance(duration, duration * _deviation, _sourceRandom).Sample()); //newDuration = (long)Math.Round(value: duration * _distribution.Sample(), mode: MidpointRounding.AwayFromZero); if (newDuration <= 3 * duration) break; diff --git a/Mate.Test/SimulationEnvironment/AgentSystem.cs b/Mate.Test/SimulationEnvironment/AgentSystem.cs index 6b2b3e29..ec0cfe5f 100644 --- a/Mate.Test/SimulationEnvironment/AgentSystem.cs +++ b/Mate.Test/SimulationEnvironment/AgentSystem.cs @@ -234,14 +234,90 @@ public static IEnumerable GetTestData() //[InlineData(SimulationType.Default, 207, 0.10)] //[InlineData(SimulationType.Default, 208, 0.10)] - [InlineData(SimulationType.Queuing, 221, 0.00)] - [InlineData(SimulationType.Queuing, 222, 0.05)] - [InlineData(SimulationType.Queuing, 223, 0.10)] - [InlineData(SimulationType.Queuing, 224, 0.15)] - [InlineData(SimulationType.Queuing, 225, 0.20)] - [InlineData(SimulationType.Queuing, 226, 0.25)] - [InlineData(SimulationType.Queuing, 227, 0.30)] - [InlineData(SimulationType.Queuing, 228, 0.35)] + //[InlineData(SimulationType.Queuing, 10001, 0.00)] + //[InlineData(SimulationType.Queuing, 10002, 0.05)] + //[InlineData(SimulationType.Queuing, 10003, 0.10)] + //[InlineData(SimulationType.Queuing, 10004, 0.15)] + //[InlineData(SimulationType.Queuing, 10005, 0.20)] + //[InlineData(SimulationType.Queuing, 10006, 0.25)] + //[InlineData(SimulationType.Queuing, 10007, 0.30)] + //[InlineData(SimulationType.Queuing, 10008, 0.35)] + + [InlineData(SimulationType.Default, 20000, 0.00)] + [InlineData(SimulationType.Default, 20001, 0.05)] + + //[InlineData(SimulationType.Queuing, 10111, 0.00)] + //[InlineData(SimulationType.Queuing, 10112, 0.00)] + //[InlineData(SimulationType.Queuing, 10113, 0.00)] + //[InlineData(SimulationType.Queuing, 10114, 0.00)] + //[InlineData(SimulationType.Queuing, 10115, 0.00)] + //[InlineData(SimulationType.Queuing, 10116, 0.00)] + //[InlineData(SimulationType.Queuing, 10117, 0.00)] + //[InlineData(SimulationType.Queuing, 10118, 0.00)] + // + //[InlineData(SimulationType.Queuing, 10511, 0.05)] + //[InlineData(SimulationType.Queuing, 10512, 0.05)] + //[InlineData(SimulationType.Queuing, 10513, 0.05)] + //[InlineData(SimulationType.Queuing, 10514, 0.05)] + //[InlineData(SimulationType.Queuing, 10515, 0.05)] + //[InlineData(SimulationType.Queuing, 10516, 0.05)] + //[InlineData(SimulationType.Queuing, 10517, 0.05)] + //[InlineData(SimulationType.Queuing, 10518, 0.05)] + // + //[InlineData(SimulationType.Queuing, 11011, 0.10)] + //[InlineData(SimulationType.Queuing, 11012, 0.10)] + //[InlineData(SimulationType.Queuing, 11013, 0.10)] + //[InlineData(SimulationType.Queuing, 11014, 0.10)] + //[InlineData(SimulationType.Queuing, 11015, 0.10)] + //[InlineData(SimulationType.Queuing, 11016, 0.10)] + //[InlineData(SimulationType.Queuing, 11017, 0.10)] + //[InlineData(SimulationType.Queuing, 11018, 0.10)] + // + //[InlineData(SimulationType.Queuing, 11511, 0.15)] + //[InlineData(SimulationType.Queuing, 11512, 0.15)] + //[InlineData(SimulationType.Queuing, 11513, 0.15)] + //[InlineData(SimulationType.Queuing, 11514, 0.15)] + //[InlineData(SimulationType.Queuing, 11515, 0.15)] + //[InlineData(SimulationType.Queuing, 11516, 0.15)] + //[InlineData(SimulationType.Queuing, 11517, 0.15)] + //[InlineData(SimulationType.Queuing, 11518, 0.15)] + // + //[InlineData(SimulationType.Queuing, 12011, 0.20)] + //[InlineData(SimulationType.Queuing, 12012, 0.20)] + //[InlineData(SimulationType.Queuing, 12013, 0.20)] + //[InlineData(SimulationType.Queuing, 12014, 0.20)] + //[InlineData(SimulationType.Queuing, 12015, 0.20)] + //[InlineData(SimulationType.Queuing, 12016, 0.20)] + //[InlineData(SimulationType.Queuing, 12017, 0.20)] + //[InlineData(SimulationType.Queuing, 12018, 0.20)] + // + //[InlineData(SimulationType.Queuing, 12511, 0.25)] + //[InlineData(SimulationType.Queuing, 12512, 0.25)] + //[InlineData(SimulationType.Queuing, 12513, 0.25)] + //[InlineData(SimulationType.Queuing, 12514, 0.25)] + //[InlineData(SimulationType.Queuing, 12515, 0.25)] + //[InlineData(SimulationType.Queuing, 12516, 0.25)] + //[InlineData(SimulationType.Queuing, 12517, 0.25)] + //[InlineData(SimulationType.Queuing, 12518, 0.25)] + // + //[InlineData(SimulationType.Queuing, 13011, 0.30)] + //[InlineData(SimulationType.Queuing, 13012, 0.30)] + //[InlineData(SimulationType.Queuing, 13013, 0.30)] + //[InlineData(SimulationType.Queuing, 13014, 0.30)] + //[InlineData(SimulationType.Queuing, 13015, 0.30)] + //[InlineData(SimulationType.Queuing, 13016, 0.30)] + //[InlineData(SimulationType.Queuing, 13017, 0.30)] + //[InlineData(SimulationType.Queuing, 13018, 0.30)] + // + //[InlineData(SimulationType.Queuing, 13511, 0.35)] + //[InlineData(SimulationType.Queuing, 13512, 0.35)] + //[InlineData(SimulationType.Queuing, 13513, 0.35)] + //[InlineData(SimulationType.Queuing, 13514, 0.35)] + //[InlineData(SimulationType.Queuing, 13515, 0.35)] + //[InlineData(SimulationType.Queuing, 13516, 0.35)] + //[InlineData(SimulationType.Queuing, 13517, 0.35)] + //[InlineData(SimulationType.Queuing, 13518, 0.35)] + public async Task AgentSystemTest(SimulationType simulationType, int simNr, double deviation) { //var simNr = Random.Shared.Next(); diff --git a/Mate.Test/SimulationEnvironment/CentralSystem.cs b/Mate.Test/SimulationEnvironment/CentralSystem.cs index b07010d4..fe540efc 100644 --- a/Mate.Test/SimulationEnvironment/CentralSystem.cs +++ b/Mate.Test/SimulationEnvironment/CentralSystem.cs @@ -237,10 +237,16 @@ public void TestGanttPlanApi() [Fact] public void GenerateRandomLogNormal() { - var _distribution = new LogNormal(mu: 2.5, sigma: 0.2); + var _sourceRandom = new Random(Seed: 169 + //TODO WARUM? + //+ simNumber + ); + + var sampler = LogNormal.WithMeanVariance(10, 10 * 0.2, _sourceRandom); for (int i = 0; i < 10000; i++) { - System.Diagnostics.Debug.WriteLine(_distribution.Sample()); + + System.Diagnostics.Debug.WriteLine(Math.Round(sampler.Sample())); } } From 235645db96c8b83c58c2e159b923acedb180df9f Mon Sep 17 00:00:00 2001 From: Martin Krockert Date: Sun, 25 Sep 2022 11:00:30 +0200 Subject: [PATCH 07/16] refreshed test setup --- .../SimulationEnvironment/AgentSystem.cs | 174 ++++++++++-------- .../SimulationEnvironment/SEEDInitializer.cs | 5 +- gource.ppm | 0 3 files changed, 103 insertions(+), 76 deletions(-) create mode 100644 gource.ppm diff --git a/Mate.Test/SimulationEnvironment/AgentSystem.cs b/Mate.Test/SimulationEnvironment/AgentSystem.cs index ec0cfe5f..c5e424db 100644 --- a/Mate.Test/SimulationEnvironment/AgentSystem.cs +++ b/Mate.Test/SimulationEnvironment/AgentSystem.cs @@ -224,7 +224,7 @@ public static IEnumerable GetTestData() //[MemberData(nameof(GetTestData))] //public async Task SystemTestAsync(SimulationType simulationType, PriorityRule priorityRule, int simNr, int maxBucketSize, long throughput, int seed , ModelSize resourceModelSize, ModelSize setupModelSize, double arrivalRate, bool distributeSetupsExponentially, bool createMeasurements = false) - [Theory] + //[Theory] //[InlineData(SimulationType.Queuing, 613, 0.05)] //[InlineData(SimulationType.Default, 502, 0.10)] //[InlineData(SimulationType.Default, 503, 0.15)] @@ -243,88 +243,114 @@ public static IEnumerable GetTestData() //[InlineData(SimulationType.Queuing, 10007, 0.30)] //[InlineData(SimulationType.Queuing, 10008, 0.35)] - [InlineData(SimulationType.Default, 20000, 0.00)] - [InlineData(SimulationType.Default, 20001, 0.05)] - - //[InlineData(SimulationType.Queuing, 10111, 0.00)] - //[InlineData(SimulationType.Queuing, 10112, 0.00)] - //[InlineData(SimulationType.Queuing, 10113, 0.00)] - //[InlineData(SimulationType.Queuing, 10114, 0.00)] - //[InlineData(SimulationType.Queuing, 10115, 0.00)] - //[InlineData(SimulationType.Queuing, 10116, 0.00)] - //[InlineData(SimulationType.Queuing, 10117, 0.00)] - //[InlineData(SimulationType.Queuing, 10118, 0.00)] + //[InlineData(SimulationType.Queuing, 20004, 0.20)] + //[InlineData(SimulationType.Default, 20005, 0.20)] + //[InlineData(SimulationType.Default, 20001, 0.05)] + + //[InlineData(SimulationType.Default, 33111, 0.00)] + //[InlineData(SimulationType.Queuing, 20112, 0.00)] + //[InlineData(SimulationType.Queuing, 20113, 0.00)] + //[InlineData(SimulationType.Queuing, 20114, 0.00)] + //[InlineData(SimulationType.Queuing, 20115, 0.00)] + //[InlineData(SimulationType.Queuing, 20116, 0.00)] + //[InlineData(SimulationType.Queuing, 20117, 0.00)] + //[InlineData(SimulationType.Queuing, 20118, 0.00)] // - //[InlineData(SimulationType.Queuing, 10511, 0.05)] - //[InlineData(SimulationType.Queuing, 10512, 0.05)] - //[InlineData(SimulationType.Queuing, 10513, 0.05)] - //[InlineData(SimulationType.Queuing, 10514, 0.05)] - //[InlineData(SimulationType.Queuing, 10515, 0.05)] - //[InlineData(SimulationType.Queuing, 10516, 0.05)] - //[InlineData(SimulationType.Queuing, 10517, 0.05)] - //[InlineData(SimulationType.Queuing, 10518, 0.05)] + //[InlineData(SimulationType.Default, 511, 0.05)] + //[InlineData(SimulationType.Queuing, 20512, 0.05)] + //[InlineData(SimulationType.Queuing, 20513, 0.05)] + //[InlineData(SimulationType.Queuing, 20514, 0.05)] + //[InlineData(SimulationType.Queuing, 20515, 0.05)] + //[InlineData(SimulationType.Queuing, 20516, 0.05)] + //[InlineData(SimulationType.Queuing, 20517, 0.05)] + //[InlineData(SimulationType.Queuing, 20518, 0.05)] // - //[InlineData(SimulationType.Queuing, 11011, 0.10)] - //[InlineData(SimulationType.Queuing, 11012, 0.10)] - //[InlineData(SimulationType.Queuing, 11013, 0.10)] - //[InlineData(SimulationType.Queuing, 11014, 0.10)] - //[InlineData(SimulationType.Queuing, 11015, 0.10)] - //[InlineData(SimulationType.Queuing, 11016, 0.10)] - //[InlineData(SimulationType.Queuing, 11017, 0.10)] - //[InlineData(SimulationType.Queuing, 11018, 0.10)] + //[InlineData(SimulationType.Default, 1011, 0.10)] + //[InlineData(SimulationType.Queuing, 21012, 0.10)] + //[InlineData(SimulationType.Queuing, 21013, 0.10)] + //[InlineData(SimulationType.Queuing, 21014, 0.10)] + //[InlineData(SimulationType.Queuing, 21015, 0.10)] + //[InlineData(SimulationType.Queuing, 21016, 0.10)] + //[InlineData(SimulationType.Queuing, 21017, 0.10)] + //[InlineData(SimulationType.Queuing, 21018, 0.10)] // - //[InlineData(SimulationType.Queuing, 11511, 0.15)] - //[InlineData(SimulationType.Queuing, 11512, 0.15)] - //[InlineData(SimulationType.Queuing, 11513, 0.15)] - //[InlineData(SimulationType.Queuing, 11514, 0.15)] - //[InlineData(SimulationType.Queuing, 11515, 0.15)] - //[InlineData(SimulationType.Queuing, 11516, 0.15)] - //[InlineData(SimulationType.Queuing, 11517, 0.15)] - //[InlineData(SimulationType.Queuing, 11518, 0.15)] + //[InlineData(SimulationType.Default, 1511, 0.15)] + //[InlineData(SimulationType.Queuing, 21512, 0.15)] + //[InlineData(SimulationType.Queuing, 21513, 0.15)] + //[InlineData(SimulationType.Queuing, 21514, 0.15)] + //[InlineData(SimulationType.Queuing, 21515, 0.15)] + //[InlineData(SimulationType.Queuing, 21516, 0.15)] + //[InlineData(SimulationType.Queuing, 21517, 0.15)] + //[InlineData(SimulationType.Queuing, 21518, 0.15)] // - //[InlineData(SimulationType.Queuing, 12011, 0.20)] - //[InlineData(SimulationType.Queuing, 12012, 0.20)] - //[InlineData(SimulationType.Queuing, 12013, 0.20)] - //[InlineData(SimulationType.Queuing, 12014, 0.20)] - //[InlineData(SimulationType.Queuing, 12015, 0.20)] - //[InlineData(SimulationType.Queuing, 12016, 0.20)] - //[InlineData(SimulationType.Queuing, 12017, 0.20)] - //[InlineData(SimulationType.Queuing, 12018, 0.20)] + //[InlineData(SimulationType.Default, 2011, 0.20)] + //[InlineData(SimulationType.Queuing, 22012, 0.20)] + //[InlineData(SimulationType.Queuing, 22013, 0.20)] + //[InlineData(SimulationType.Queuing, 22014, 0.20)] + //[InlineData(SimulationType.Queuing, 22015, 0.20)] + //[InlineData(SimulationType.Queuing, 22016, 0.20)] + //[InlineData(SimulationType.Queuing, 22017, 0.20)] + //[InlineData(SimulationType.Queuing, 22018, 0.20)] // - //[InlineData(SimulationType.Queuing, 12511, 0.25)] - //[InlineData(SimulationType.Queuing, 12512, 0.25)] - //[InlineData(SimulationType.Queuing, 12513, 0.25)] - //[InlineData(SimulationType.Queuing, 12514, 0.25)] - //[InlineData(SimulationType.Queuing, 12515, 0.25)] - //[InlineData(SimulationType.Queuing, 12516, 0.25)] - //[InlineData(SimulationType.Queuing, 12517, 0.25)] - //[InlineData(SimulationType.Queuing, 12518, 0.25)] + //[InlineData(SimulationType.Default, 2511, 0.25)] + //[InlineData(SimulationType.Queuing, 22512, 0.25)] + //[InlineData(SimulationType.Queuing, 22513, 0.25)] + //[InlineData(SimulationType.Queuing, 22514, 0.25)] + //[InlineData(SimulationType.Queuing, 22515, 0.25)] + //[InlineData(SimulationType.Queuing, 22516, 0.25)] + //[InlineData(SimulationType.Queuing, 22517, 0.25)] + //[InlineData(SimulationType.Queuing, 22518, 0.25)] // - //[InlineData(SimulationType.Queuing, 13011, 0.30)] - //[InlineData(SimulationType.Queuing, 13012, 0.30)] - //[InlineData(SimulationType.Queuing, 13013, 0.30)] - //[InlineData(SimulationType.Queuing, 13014, 0.30)] - //[InlineData(SimulationType.Queuing, 13015, 0.30)] - //[InlineData(SimulationType.Queuing, 13016, 0.30)] - //[InlineData(SimulationType.Queuing, 13017, 0.30)] - //[InlineData(SimulationType.Queuing, 13018, 0.30)] + //[InlineData(SimulationType.Default, 3011, 0.30)] + //[InlineData(SimulationType.Queuing, 23012, 0.30)] + //[InlineData(SimulationType.Queuing, 23013, 0.30)] + //[InlineData(SimulationType.Queuing, 23014, 0.30)] + //[InlineData(SimulationType.Queuing, 23015, 0.30)] + //[InlineData(SimulationType.Queuing, 23016, 0.30)] + //[InlineData(SimulationType.Queuing, 23017, 0.30)] + //[InlineData(SimulationType.Queuing, 23018, 0.30)] // - //[InlineData(SimulationType.Queuing, 13511, 0.35)] - //[InlineData(SimulationType.Queuing, 13512, 0.35)] - //[InlineData(SimulationType.Queuing, 13513, 0.35)] - //[InlineData(SimulationType.Queuing, 13514, 0.35)] - //[InlineData(SimulationType.Queuing, 13515, 0.35)] - //[InlineData(SimulationType.Queuing, 13516, 0.35)] - //[InlineData(SimulationType.Queuing, 13517, 0.35)] - //[InlineData(SimulationType.Queuing, 13518, 0.35)] - + //[InlineData(SimulationType.Default, 33511, 0.35)] + //[InlineData(SimulationType.Queuing, 23512, 0.35)] + //[InlineData(SimulationType.Queuing, 23513, 0.35)] + //[InlineData(SimulationType.Queuing, 23514, 0.35)] + //[InlineData(SimulationType.Queuing, 23515, 0.35)] + //[InlineData(SimulationType.Queuing, 23516, 0.35)] + //[InlineData(SimulationType.Queuing, 23517, 0.35)] + //[InlineData(SimulationType.Queuing, 23518, 0.35)] + + public static IEnumerable GetEvalData(SimulationType simulationType) + { + var simNumber = Convert.ToInt32(string.Concat((int)simulationType, "000")); + // central 1000 + // default 3000 + // queue 4000 + var deviation = 0.0; + for (int i = 0; i < 8; i++) // run from 0.0 to 0.35 + { + for (int y = 0; y < 3; y++) // three runs each config + { + yield return new object[] + { + simulationType, //simulationType + simNumber++, + deviation + }; + simNumber++; + } + deviation += 0.05; + simNumber = (int)Math.Round((decimal)simNumber / 10) * 10 + 100; // make simnumber jump 100 + } + } + [Theory] + [MemberData(nameof(GetEvalData), SimulationType.Central)] public async Task AgentSystemTest(SimulationType simulationType, int simNr, double deviation) { //var simNr = Random.Shared.Next(); //var simulationType = SimulationType.Default; var seed = 169; - var throughput = 1920; - var arrivalRate = 0.035; + var throughput = 10080; + var arrivalRate = 0.037; //LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Trace, LogLevel.Trace); LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Info, LogLevel.Info); @@ -364,7 +390,7 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub // update customized Items simConfig.AddOption(new ResultsDbConnectionString(dbResult.ConnectionString.Value)); simConfig.ReplaceOption(new KpiTimeSpan(240)); - simConfig.ReplaceOption(new TimeConstraintQueueLength(480)); + simConfig.ReplaceOption(new TimeConstraintQueueLength(480 * 6 * 2)); // = schicht * setups * x simConfig.ReplaceOption(new SimulationKind(value: simulationType)); simConfig.ReplaceOption(new OrderArrivalRate(value: arrivalRate)); simConfig.ReplaceOption(new OrderQuantity(value: 10000)); @@ -379,14 +405,14 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub simConfig.ReplaceOption(new DebugSystem(value: false)); simConfig.ReplaceOption(new DebugAgents(value: false)); simConfig.ReplaceOption(new WorkTimeDeviation(deviation)); - simConfig.ReplaceOption(new MaxBucketSize(value: 1920)); + simConfig.ReplaceOption(new MaxBucketSize(value: 480 * 6 * 2)); // = schicht * setups * x simConfig.ReplaceOption(new SimulationNumber(value: simNr)); simConfig.ReplaceOption(new CreateQualityData(false)); simConfig.ReplaceOption(new Mate.Production.Core.Environment.Options.PriorityRule(PriorityRule.LST)); ClearResultDBby(simNr: simConfig.GetOption(), dbName: TestMateResultDb); - BaseSimulation simContext = null; + BaseSimulation simContext; if (simulationType == SimulationType.Central) { diff --git a/Mate.Test/SimulationEnvironment/SEEDInitializer.cs b/Mate.Test/SimulationEnvironment/SEEDInitializer.cs index 53aa7ac1..a9efd894 100644 --- a/Mate.Test/SimulationEnvironment/SEEDInitializer.cs +++ b/Mate.Test/SimulationEnvironment/SEEDInitializer.cs @@ -35,8 +35,9 @@ public void GenerateTestData(string mateDbName) StructureParameter = new StructureParameter() { ComplexityRatio = 1.9, ReuseRatio = 1.3, - NumberOfSalesMaterials = 100, - VerticalIntegration = 4 + NumberOfSalesMaterials = 100, + VerticalIntegration = 4, + // Seed = 3 }, TransitionMatrixParameter = new TransitionMatrixParameter() { Lambda = 2, diff --git a/gource.ppm b/gource.ppm new file mode 100644 index 00000000..e69de29b From 3bae9bd24a75828becad0a36c29122b94e774a62 Mon Sep 17 00:00:00 2001 From: MarvinMat <38523923+MarvinMat@users.noreply.github.com> Date: Thu, 20 Oct 2022 20:30:48 +0200 Subject: [PATCH 08/16] Hash-Value to randomWorkTimeGenerator for (Default, Queuing, Central) --- Mate.Production.Core/AgentContinuation.cs | 4 +- .../CollectorAgent/Collector.Analytics.Job.cs | 4 +- .../CollectorAgent/Types/StabilityManager.cs | 6 +- .../Agents/HubAgent/Behaviour/Central.cs | 5 +- .../Agents/HubAgent/Behaviour/Default.cs | 2 +- .../Agents/HubAgent/Behaviour/Queuing.cs | 63 +++++++++- .../Types/Queuing/CapabilityJobStorage.cs | 9 ++ .../HubAgent/Types/Queuing/JobManager.cs | 35 ++++++ .../DeflectionGenerator.cs | 2 +- .../OrderGeneratorPerformance.cs | 3 +- .../DistributionProvider/WorkTimeGenerator.cs | 18 +++ .../SimulationEnvironment/AgentSystem.cs | 117 +++++++++++------- .../SimulationEnvironment/SEEDInitializer.cs | 78 ++++++------ 13 files changed, 245 insertions(+), 101 deletions(-) diff --git a/Mate.Production.Core/AgentContinuation.cs b/Mate.Production.Core/AgentContinuation.cs index 1e507e35..73c4a70a 100644 --- a/Mate.Production.Core/AgentContinuation.cs +++ b/Mate.Production.Core/AgentContinuation.cs @@ -44,7 +44,7 @@ public override void AfterSimulationStopped(Simulation sim) tasks.Add(item.Ask(message: msg, timeout: TimeSpan.FromSeconds(value: 60 * 60))); } - Task.WaitAll(tasks.ToArray()); + Task.WaitAll(tasks.ToArray(), timeout: TimeSpan.FromSeconds(value: 60 * 10)); } @@ -53,7 +53,7 @@ public override void SimulationIsTerminating(Simulation sim) foreach (var item in _collectorRefs) { item.Ask(message: UpdateLiveFeed.Create(setup: true, target: _inbox.Receiver) - , timeout: TimeSpan.FromMinutes(value: 5)).Wait(); + , timeout: TimeSpan.FromMinutes(value: 15)).Wait(); } sim.ActorSystem.Terminate().Wait(); _logger.Log(LogLevel.Info, $"Simulation run for { sim.ActorSystem.Uptime } and ended!"); diff --git a/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs b/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs index a2f2c165..327f99e7 100644 --- a/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs +++ b/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs @@ -210,8 +210,8 @@ private void WriteOperationKeys(bool finalCall) if (finalCall && StabilityManager.Instance.HasEntries) { //StabilityManager.Instance.WriteFile(Collector.Config.GetOption().Value); - var keyValueDic = StabilityManager.Instance.DoSomeStatistics(Collector.Config.GetOption().Value, Collector.Config.GetOption().Value); - Collector.Kpis.AddRange(keyValueDic); + //var keyValueDic = StabilityManager.Instance.DoSomeStatistics(Collector.Config.GetOption().Value, Collector.Config.GetOption().Value); + //Collector.Kpis.AddRange(keyValueDic); } } diff --git a/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs b/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs index b39b9636..b464576a 100644 --- a/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs +++ b/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs @@ -101,7 +101,7 @@ public List DoSomeStatistics(int simNum=1, SimulationType simType = Simulat } - if (next.Position.Equals(actual.Position) && next.Resource.Equals(actual.Resource)) + if ((actual.Resource.Equals(String.Empty) || next.Resource.Equals(String.Empty)) || next.Position.Equals(actual.Position) && next.Resource.Equals(actual.Resource)) counter++; // wieviele Jobs haben tatsächlich die Maschine gewechselt? @@ -114,8 +114,8 @@ public List DoSomeStatistics(int simNum=1, SimulationType simType = Simulat keyValuePairs.Add(CreateKpi("RatioUselessReplan", Math.Round(((double)counter / (double)result) * 100, 2), simNum, simType)); keyValuePairs.Add(CreateKpi("AverageTimeSpan", averageList.Average(), simNum, simType)); - //System.Diagnostics.Debug.WriteLine($"{counter} entries of {result}: {Math.Round(((double)counter/(double)result)*100,2)}%"); - //System.Diagnostics.Debug.WriteLine($"Average timespan change {averageList.Average()}"); + System.Diagnostics.Debug.WriteLine($"{counter} entries of {result}: {Math.Round(((double)counter/(double)result)*100,2)}%"); + System.Diagnostics.Debug.WriteLine($"Average timespan change {averageList.Average()}"); foreach (var positon in averagePosition.OrderBy(x => x.Key)) { diff --git a/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs b/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs index 5f7a4c14..6dc85b7f 100644 --- a/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs +++ b/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs @@ -394,8 +394,9 @@ private void StartActivity(List requiredResources //only randomize ActivityType "Operation" if (fActivity.ActivityId == 3) - { - randomizedDuration = _workTimeGenerator.GetRandomWorkTime(fActivity.Duration); + { + + randomizedDuration = _workTimeGenerator.GetRandomWorkTime(fActivity.Duration, fActivity.Key.GetHashCode()); } CreateSimulationJob(activity, Agent.CurrentTime, randomizedDuration, requiredCapability); diff --git a/Mate.Production.Core/Agents/HubAgent/Behaviour/Default.cs b/Mate.Production.Core/Agents/HubAgent/Behaviour/Default.cs index b4f3b398..d413ab1c 100644 --- a/Mate.Production.Core/Agents/HubAgent/Behaviour/Default.cs +++ b/Mate.Production.Core/Agents/HubAgent/Behaviour/Default.cs @@ -386,7 +386,7 @@ private void SendFinalBucket(Guid bucketKey) bucket.Operations.ForEach(operation => { operation.Operation.RandomizedDuration = - _workTimeGenerator.GetRandomWorkTime(operation.Operation.Duration); + _workTimeGenerator.GetRandomWorkTime(operation.Operation.Duration, (operation.ProductionAgent.GetHashCode() + operation.Operation.HierarchyNumber).GetHashCode()); Agent.DebugMessage($"{operation.Operation.Name} {operation.Key} from {((FBuckets.FBucket)jobConfirmation.Job).Name} has new work time of {operation.Operation.RandomizedDuration}.", CustomLogger.JOB, LogLevel.Warn); diff --git a/Mate.Production.Core/Agents/HubAgent/Behaviour/Queuing.cs b/Mate.Production.Core/Agents/HubAgent/Behaviour/Queuing.cs index 361af268..f9d74ea6 100644 --- a/Mate.Production.Core/Agents/HubAgent/Behaviour/Queuing.cs +++ b/Mate.Production.Core/Agents/HubAgent/Behaviour/Queuing.cs @@ -1,7 +1,9 @@ using System; +using System.Collections.Generic; using System.Linq; using Akka.Actor; using Mate.DataCore.Nominal; +using Mate.Production.Core.Agents.CollectorAgent.Types; using Mate.Production.Core.Agents.HubAgent.Types; using Mate.Production.Core.Agents.HubAgent.Types.Queuing; using Mate.Production.Core.Agents.ResourceAgent; @@ -89,11 +91,37 @@ private void EnqueueJob(IJob job) operation.UpdateHubAgent(hub: Agent.Context.Self); + //Dequeue behind the new jobs prio + + (var followingJobs, var counterPreviousJobs , var durationPreviousJobs) = _jobManager.GetPostionOfJob(job, Agent.CurrentTime); + + foreach (var followingJob in followingJobs.OrderBy(x => x.Priority(Agent.CurrentTime))) + { + if (followingJobs.Count() == 0) + break; + + if (followingJob.Key.Equals(job.Key)) + continue; + + AddToStabilityManager(followingJob.Key, durationPreviousJobs, counterPreviousJobs, String.Empty, Process.Dequeue); + + AddToStabilityManager(followingJob.Key, durationPreviousJobs + operation.Operation.Duration, counterPreviousJobs + 1, String.Empty, Process.Enqueue); + + //add current job to counters for next jobs in followingjobs + counterPreviousJobs += 1; + durationPreviousJobs += followingJob.Duration; + + } + _jobManager.SetJob(job, Agent.CurrentTime); + //Enqueue behing the new jobs prio + StartNext(); } + + private void StartNext() { var availableCapabilities = _resourceManager.GetAvailableCapabilities(); @@ -225,9 +253,22 @@ private void DoWork(Guid queueKey, IJob job) { var jobQueue = _jobManager.GetActiveJob(queueKey); + //var fristJobInQueue = jobQueue.Peek(Agent.CurrentTime); + // + //foreach (var rescheduledJob in jobQueue.JobQueue) + //{ + // if (rescheduledJob.Key.Equals(job.Key)) + // continue; + // var jobpostion = _jobManager.GetPositionFromActiveJob(jobQueue, job, Agent.CurrentTime); + // AddToStabilityManager(rescheduledJob.Key, jobpostion.Item1, jobpostion.Item2, String.Empty, Process.Dequeue); + // + // AddToStabilityManager(rescheduledJob.Key, jobpostion.Item1 - fristJobInQueue.Duration, jobpostion.Item2 - 1, String.Empty, Process.Enqueue); + //} var nextJob = jobQueue.Dequeue(Agent.CurrentTime); + + var operation = nextJob as FOperation; - var randomizedDuration = _workTimeGenerator.GetRandomWorkTime(nextJob.Duration); + var randomizedDuration = _workTimeGenerator.GetRandomWorkTime(nextJob.Duration, (operation.ProductionAgent.GetHashCode() + operation.Operation.HierarchyNumber).GetHashCode()); Agent.DebugMessage($"Start DoWork for {jobQueue.QueueId} with job {nextJob.Name} and randomized duration of {randomizedDuration}"); @@ -249,6 +290,7 @@ private void DoWork(Guid queueKey, IJob job) jobType: JobType.OPERATION ); + Agent.Send(Resource.Instruction.Queuing.DoJob.Create(fQueuingJob, (IActorRef)resource.IResourceRef)); } } @@ -334,6 +376,23 @@ private void CreateOperationResults(IQueueingJob fQueuingJob) Agent.Send(BasicInstruction.FinishJob.Create(fOperationResult, job.ProductionAgent)); } + + private void AddToStabilityManager(Guid key, long scopeStart, int position, string resource, Process process) + { + var operationKeys = new List() { key.ToString() }; + var pub = new FCreateStabilityMeasurements.FCreateStabilityMeasurement( + keys: operationKeys + , time: Agent.CurrentTime + , position: position + , resource: resource + , start: scopeStart + , process: process.ToString() + ); + + Agent.Context.System.EventStream.Publish(@event: pub); + + } + } - + } diff --git a/Mate.Production.Core/Agents/HubAgent/Types/Queuing/CapabilityJobStorage.cs b/Mate.Production.Core/Agents/HubAgent/Types/Queuing/CapabilityJobStorage.cs index 2ad3fb1e..c3caa42c 100644 --- a/Mate.Production.Core/Agents/HubAgent/Types/Queuing/CapabilityJobStorage.cs +++ b/Mate.Production.Core/Agents/HubAgent/Types/Queuing/CapabilityJobStorage.cs @@ -17,6 +17,15 @@ public CapabilityJobStorage() } + public JobQueue GetJobQueue(int requiredCapabilityId) + { + if (_jobStorage.TryGetValue(requiredCapabilityId, out var jobQueue)) + { + return jobQueue; + } + return null; + } + public void Add(IJob job, long currentTime) { if (_jobStorage.TryGetValue(job.RequiredCapability.Id, out var jobQueue)) diff --git a/Mate.Production.Core/Agents/HubAgent/Types/Queuing/JobManager.cs b/Mate.Production.Core/Agents/HubAgent/Types/Queuing/JobManager.cs index 0d92a150..7740cb9a 100644 --- a/Mate.Production.Core/Agents/HubAgent/Types/Queuing/JobManager.cs +++ b/Mate.Production.Core/Agents/HubAgent/Types/Queuing/JobManager.cs @@ -74,5 +74,40 @@ internal void Remove(JobQueue jobQueue) { _capabilityJobStorage.Remove(jobQueue); } + + /// + /// + /// + /// + /// + /// + /// List followingJobs + /// int counterPreviousJobs + /// long durationPreviousJobs + /// + public (List, int, long) GetPostionOfJob(IJob job, long currentTime) + { + //int counterPreviousJobs = _activeJobList.Sum(x => x.JobQueue.Count()); + //long durationPreviousJobs = _activeJobList.Sum(x => x.JobQueue.Sum(y => y.Duration)); + var counterPreviousJobs = 0; + var durationPreviousJobs = 0L; + var followingJobs = new List(); + + var capabilityQueue = _capabilityJobStorage.GetJobQueue(job.RequiredCapability.Id); + + if(capabilityQueue != null) + { + var previousJobs = capabilityQueue.Where(x => x.Priority(currentTime) <= job.Priority(currentTime)); + + counterPreviousJobs = previousJobs.Count(); + durationPreviousJobs = previousJobs.Sum(x => x.Duration); + + followingJobs = capabilityQueue.Where(x => x.Priority(currentTime) > job.Priority(currentTime)).ToList(); + } + return (followingJobs, counterPreviousJobs, durationPreviousJobs); + + + } + } } diff --git a/Mate.Production.Core/Helper/DistributionProvider/DeflectionGenerator.cs b/Mate.Production.Core/Helper/DistributionProvider/DeflectionGenerator.cs index eff76f32..8c5bec29 100644 --- a/Mate.Production.Core/Helper/DistributionProvider/DeflectionGenerator.cs +++ b/Mate.Production.Core/Helper/DistributionProvider/DeflectionGenerator.cs @@ -13,7 +13,7 @@ public class DeflectionGenerator Random _random = null; public DeflectionGenerator(int seed) { - var random = new Random(Seed: seed); + _random = new Random(Seed: seed); } diff --git a/Mate.Production.Core/Helper/DistributionProvider/OrderGeneratorPerformance.cs b/Mate.Production.Core/Helper/DistributionProvider/OrderGeneratorPerformance.cs index 6dac8b14..1f9c6fa9 100644 --- a/Mate.Production.Core/Helper/DistributionProvider/OrderGeneratorPerformance.cs +++ b/Mate.Production.Core/Helper/DistributionProvider/OrderGeneratorPerformance.cs @@ -29,8 +29,7 @@ public class OrderGeneratorPerformance : IOrderGenerator public OrderGeneratorPerformance(Configuration simConfig, List productIds, IEnumerable articles, IEnumerable businessPartners) { - _seededRandom = new Random(Seed: simConfig.GetOption().Value + - simConfig.GetOption().Value); + _seededRandom = new Random(Seed: simConfig.GetOption().Value); _exponential = new Exponential(rate: simConfig.GetOption().Value, randomSource: _seededRandom); _productIds = productIds; diff --git a/Mate.Production.Core/Helper/DistributionProvider/WorkTimeGenerator.cs b/Mate.Production.Core/Helper/DistributionProvider/WorkTimeGenerator.cs index 743c0f53..d9ce4b8b 100644 --- a/Mate.Production.Core/Helper/DistributionProvider/WorkTimeGenerator.cs +++ b/Mate.Production.Core/Helper/DistributionProvider/WorkTimeGenerator.cs @@ -49,5 +49,23 @@ public long GetRandomWorkTime(long duration) } return newDuration > 1 ? newDuration : 1; } + + public long GetRandomWorkTime(long duration, int hash) + { + if (_deviation == 0.0) + return duration; + + _sourceRandom = new Random(Seed: hash ); + + long newDuration; + while (true) + { + newDuration = (long)Math.Round(LogNormal.WithMeanVariance(duration, duration * _deviation, _sourceRandom).Sample()); + + //newDuration = (long)Math.Round(value: duration * _distribution.Sample(), mode: MidpointRounding.AwayFromZero); + if (newDuration <= 3 * duration) break; + } + return newDuration > 1 ? newDuration : 1; + } } } diff --git a/Mate.Test/SimulationEnvironment/AgentSystem.cs b/Mate.Test/SimulationEnvironment/AgentSystem.cs index c5e424db..c49be108 100644 --- a/Mate.Test/SimulationEnvironment/AgentSystem.cs +++ b/Mate.Test/SimulationEnvironment/AgentSystem.cs @@ -10,6 +10,7 @@ using Mate.DataCore.Data.Helper; using Mate.DataCore.Data.Helper.Types; using Mate.DataCore.Data.Initializer; +using Mate.DataCore.Data.WrappersForPrimitives; using Mate.DataCore.DataModel; using Mate.DataCore.GanttPlan; using Mate.DataCore.Nominal; @@ -19,6 +20,7 @@ using Mate.Production.Core.Agents.CollectorAgent.Types; using Mate.Production.Core.Environment.Options; using Mate.Production.Core.Helper; +using MathNet.Numerics.Distributions; using Microsoft.EntityFrameworkCore; using NLog; using Xunit; @@ -28,8 +30,6 @@ namespace Mate.Test.SimulationEnvironment { public class AgentSystem : TestKit, IClassFixture { - private SeedInitializer seedInitializer = new SeedInitializer(); - private readonly string TestMateDb = "Test" + DataBaseConfiguration.MateDb; private readonly string TestMateResultDb = "Test" + DataBaseConfiguration.MateResultDb; @@ -164,6 +164,28 @@ public void SomethingToPlayWith() } } + + [Fact] + private void GeneratorForWorkdeviations() + { + string path = @"D:\Work\Stability\MyTest2.csv"; + double _deviation = 0.2; + int duration = 10; + var listOfInts = new List(); + for (int i = 0; i < 100000; i++) + { + + var _sourceRandom = new Random(Seed: Guid.NewGuid().GetHashCode()); + listOfInts.Add((int)Math.Round(LogNormal.WithMeanVariance(duration, duration * _deviation, _sourceRandom).Sample())); + + } + + if (!System.IO.File.Exists(path)) + { + System.IO.File.WriteAllLines(path, listOfInts.Select(x => string.Join(",", x))); + } + + } private void GetSetups(M_Resource resource, MateProductionDb masterCtx) { @@ -197,7 +219,7 @@ private void GetSetups(M_Resource resource, MateProductionDb masterCtx) public static IEnumerable GetTestData() { var simNumber = 0; - var throughput = 1920; + var throughput = 10080; for (int i = 0; i < 1; i++) { @@ -223,9 +245,9 @@ public static IEnumerable GetTestData() //[MemberData(nameof(GetTestData))] //public async Task SystemTestAsync(SimulationType simulationType, PriorityRule priorityRule, int simNr, int maxBucketSize, long throughput, int seed , ModelSize resourceModelSize, ModelSize setupModelSize, double arrivalRate, bool distributeSetupsExponentially, bool createMeasurements = false) - + //[Theory] - //[InlineData(SimulationType.Queuing, 613, 0.05)] + //[InlineData(SimulationType.Queuing, 10, 0.20)] //[InlineData(SimulationType.Default, 502, 0.10)] //[InlineData(SimulationType.Default, 503, 0.15)] //[InlineData(SimulationType.Default, 204, 0.10)] @@ -246,7 +268,7 @@ public static IEnumerable GetTestData() //[InlineData(SimulationType.Queuing, 20004, 0.20)] //[InlineData(SimulationType.Default, 20005, 0.20)] //[InlineData(SimulationType.Default, 20001, 0.05)] - + //[InlineData(SimulationType.Default, 33111, 0.00)] //[InlineData(SimulationType.Queuing, 20112, 0.00)] //[InlineData(SimulationType.Queuing, 20113, 0.00)] @@ -310,47 +332,55 @@ public static IEnumerable GetTestData() //[InlineData(SimulationType.Queuing, 23017, 0.30)] //[InlineData(SimulationType.Queuing, 23018, 0.30)] // - //[InlineData(SimulationType.Default, 33511, 0.35)] - //[InlineData(SimulationType.Queuing, 23512, 0.35)] - //[InlineData(SimulationType.Queuing, 23513, 0.35)] - //[InlineData(SimulationType.Queuing, 23514, 0.35)] - //[InlineData(SimulationType.Queuing, 23515, 0.35)] + [Theory] + [InlineData(SimulationType.Central, 2500, 0.00, 0.035)] + [InlineData(SimulationType.Central, 2505, 0.05, 0.035)] + [InlineData(SimulationType.Central, 2510, 0.10, 0.035)] + [InlineData(SimulationType.Central, 2515, 0.15, 0.035)] + [InlineData(SimulationType.Central, 2520, 0.20, 0.035)] + [InlineData(SimulationType.Central, 2525, 0.25, 0.035)] + [InlineData(SimulationType.Central, 2530, 0.30, 0.035)] + [InlineData(SimulationType.Central, 2535, 0.35, 0.035)] + + //[InlineData(SimulationType.Default, 72, 2, 0.20, 0.0185)] + //[InlineData(SimulationType.Default, 74, 4, 0.20, 0.037)] + //[InlineData(SimulationType.Default, 76, 6, 0.20, 0.0555)] + //[InlineData(SimulationType.Default, 80, 8, 0.20, 0.074)] //[InlineData(SimulationType.Queuing, 23516, 0.35)] //[InlineData(SimulationType.Queuing, 23517, 0.35)] //[InlineData(SimulationType.Queuing, 23518, 0.35)] - public static IEnumerable GetEvalData(SimulationType simulationType) - { - var simNumber = Convert.ToInt32(string.Concat((int)simulationType, "000")); - // central 1000 - // default 3000 - // queue 4000 - var deviation = 0.0; - for (int i = 0; i < 8; i++) // run from 0.0 to 0.35 - { - for (int y = 0; y < 3; y++) // three runs each config - { - yield return new object[] - { - simulationType, //simulationType - simNumber++, - deviation - }; - simNumber++; - } - deviation += 0.05; - simNumber = (int)Math.Round((decimal)simNumber / 10) * 10 + 100; // make simnumber jump 100 - } - } - [Theory] - [MemberData(nameof(GetEvalData), SimulationType.Central)] - public async Task AgentSystemTest(SimulationType simulationType, int simNr, double deviation) + //public static IEnumerable GetEvalData(SimulationType simulationType) + //{ + // var simNumber = 1000; + // // central 1000 + // // default 3000 + // // queue 4000 + // var deviation = 0.0; + // for (int i = 0; i < 8; i++) // run from 0.0 to 0.35 + // { + // for (int y = 0; y < 1; y++) // three runs each config + // { + // yield return new object[] + // { + // simulationType, //simulationType + // simNumber++, + // Math.Round(deviation,2) + // }; + // } + // deviation += 0.05; + // simNumber = (int)Math.Round((decimal)simNumber + 10) ; // make simnumber jump 100 + // } + //} + //[Theory] + //[MemberData(nameof(GetEvalData), SimulationType.Default)] + public async Task AgentSystemTest(SimulationType simulationType, int simNr, double deviation, double arrivalRateRun) { //var simNr = Random.Shared.Next(); //var simulationType = SimulationType.Default; var seed = 169; var throughput = 10080; - var arrivalRate = 0.037; + var arrivalRate = arrivalRateRun; //LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Trace, LogLevel.Trace); LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Info, LogLevel.Info); @@ -371,8 +401,9 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub //dbResult.DbContext.Database.EnsureDeleted(); //dbResult.DbContext.Database.EnsureCreated(); //ResultDBInitializerBasic.DbInitialize(dbResult.DbContext); - - seedInitializer.GenerateTestData(TestMateDb); + + SeedInitializer seedInitializer = new SeedInitializer(); + seedInitializer.GenerateTestData(TestMateDb, machineCount: 4, toolCount: 6); //dbMaster.DbContext.Database.EnsureDeleted(); //dbMaster.DbContext.Database.EnsureCreated(); @@ -400,10 +431,10 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub simConfig.ReplaceOption(new SettlingStart(value: 2880)); simConfig.ReplaceOption(new MinDeliveryTime(value: 10)); simConfig.ReplaceOption(new MaxDeliveryTime(value: 15)); - simConfig.ReplaceOption(new SimulationEnd(value: 10080*3)); + simConfig.ReplaceOption(new SimulationEnd(value: 10080 * 3)); simConfig.ReplaceOption(new SaveToDB(value: true)); - simConfig.ReplaceOption(new DebugSystem(value: false)); - simConfig.ReplaceOption(new DebugAgents(value: false)); + simConfig.ReplaceOption(new DebugSystem(value: true)); + simConfig.ReplaceOption(new DebugAgents(value: true)); simConfig.ReplaceOption(new WorkTimeDeviation(deviation)); simConfig.ReplaceOption(new MaxBucketSize(value: 480 * 6 * 2)); // = schicht * setups * x simConfig.ReplaceOption(new SimulationNumber(value: simNr)); diff --git a/Mate.Test/SimulationEnvironment/SEEDInitializer.cs b/Mate.Test/SimulationEnvironment/SEEDInitializer.cs index a9efd894..0ecb4e5a 100644 --- a/Mate.Test/SimulationEnvironment/SEEDInitializer.cs +++ b/Mate.Test/SimulationEnvironment/SEEDInitializer.cs @@ -25,9 +25,9 @@ public void Dispose() { } - public void GenerateTestData(string mateDbName) + public void GenerateTestData(string mateDbName, int machineCount, int toolCount) { - + //Generate Config var seedConfig = new Configuration(); var materialConfig = new MaterialConfig() @@ -37,11 +37,11 @@ public void GenerateTestData(string mateDbName) ReuseRatio = 1.3, NumberOfSalesMaterials = 100, VerticalIntegration = 4, - // Seed = 3 + Seed = 5 }, - TransitionMatrixParameter = new TransitionMatrixParameter() { + TransitionMatrixParameter = new TransitionMatrixParameter() { Lambda = 2, - OrganizationalDegree = 0.7 + OrganizationalDegree = 0.7 } }; @@ -50,50 +50,22 @@ public void GenerateTestData(string mateDbName) var rsSaw = new ResourceGroup("Saw") - .WithResourceuQuantity(4) - .WithTools(new List { - new ResourceTool("Blade 4mm"), - new ResourceTool("Blade 6mm"), - new ResourceTool("Blade 8mm"), - new ResourceTool("Blade 10mm"), - new ResourceTool("Blade 12mm"), - new ResourceTool("Blade 14mm") - }); + .WithResourceuQuantity(machineCount) + .WithTools(GenerateTools(toolCount)); var rsDrill = new ResourceGroup("Drill") - .WithResourceuQuantity(4) - .WithTools(new List { - new ResourceTool("Blade 4mm"), - new ResourceTool("Blade 6mm"), - new ResourceTool("Blade 8mm"), - new ResourceTool("Blade 10mm"), - new ResourceTool("Blade 12mm"), - new ResourceTool("Blade 14mm") - }); + .WithResourceuQuantity(machineCount) + .WithTools(GenerateTools(toolCount)); var rsAssembly = new ResourceGroup("Assembly") - .WithResourceuQuantity(4) - .WithTools(new List { - new ResourceTool("Blade 4mm"), - new ResourceTool("Blade 6mm"), - new ResourceTool("Blade 8mm"), - new ResourceTool("Blade 10mm"), - new ResourceTool("Blade 12mm"), - new ResourceTool("Blade 14mm") - }); + .WithResourceuQuantity(machineCount) + .WithTools(GenerateTools(toolCount)); var rsQuality = new ResourceGroup("Quality") - .WithResourceuQuantity(4) - .WithTools(new List { - new ResourceTool("Blade 4mm"), - new ResourceTool("Blade 6mm"), - new ResourceTool("Blade 8mm"), - new ResourceTool("Blade 10mm"), - new ResourceTool("Blade 12mm"), - new ResourceTool("Blade 14mm") - }); - - var resourceConfig = new ResourceConfig().WithResourceGroup(new List { rsSaw, rsDrill, rsAssembly, rsQuality}) + .WithResourceuQuantity(machineCount) + .WithTools(GenerateTools(toolCount)); + + var resourceConfig = new ResourceConfig().WithResourceGroup(new List { rsSaw, rsDrill, rsAssembly, rsQuality }) .WithDefaultOperationsDurationMean(TimeSpan.FromMinutes(10)) .WithDefaultOperationsDurationVariance(0.20) .WithDefaultSetupDurationMean(TimeSpan.FromMinutes(30)) @@ -137,5 +109,25 @@ public void GenerateTestData(string mateDbName) } + + private List GenerateTools(int amount) + { + var listOfTools = new List(); + var counter = 2; + + + for (int i = 0; i < amount; i++) + { + + var nameOfTool = "Blade" + counter.ToString() + "mm"; + listOfTools.Add(new ResourceTool(nameOfTool)); + counter += 2; + } + + + return listOfTools; + + } } + } From 6b77874b86bc25006e9e90e77c3c02db96c416bf Mon Sep 17 00:00:00 2001 From: Martin Krockert Date: Mon, 24 Oct 2022 15:26:47 +0200 Subject: [PATCH 09/16] Central Experiments --- Mate.Production.Core/AgentSimulation.cs | 20 +- .../SimulationEnvironment/AgentSystem.cs | 250 +++++++++--------- .../SimulationEnvironment/SEEDInitializer.cs | 11 +- 3 files changed, 142 insertions(+), 139 deletions(-) diff --git a/Mate.Production.Core/AgentSimulation.cs b/Mate.Production.Core/AgentSimulation.cs index 914bba6b..050776da 100644 --- a/Mate.Production.Core/AgentSimulation.cs +++ b/Mate.Production.Core/AgentSimulation.cs @@ -7,6 +7,8 @@ using Akka.Event; using AkkaSim; using AkkaSim.SpecialActors; +using Mate.DataCore.Data.Initializer.StoredProcedures; +using Mate.DataCore.Data.WrappersForPrimitives; using Mate.DataCore.DataModel; using Mate.DataCore.Nominal.Model; using Mate.Production.Core.Agents; @@ -16,6 +18,7 @@ using Mate.Production.Core.Agents.Guardian; using Mate.Production.Core.Agents.Guardian.Options; using Mate.Production.Core.Agents.HubAgent.Types.Central; +using Mate.Production.Core.Agents.ProductionAgent; using Mate.Production.Core.Agents.SupervisorAgent; using Mate.Production.Core.Environment; using Mate.Production.Core.Environment.Options; @@ -89,13 +92,24 @@ public override Task InitializeSimulation(Configuration configuratio }); } + private long GetCustomOrderTime(int productId) + { + return ArticleStatistics.DeliveryDateEstimator(productId, 10, DbProduction.DbContext); + } + + private void CreateSupervisor(Configuration configuration) { var products = DbProduction.DbContext.GetProducts(); - var initialTime = configuration.GetOption().Value; + // var initialTime = configuration.GetOption().Value; + + var estimatedThroughPuts = products.Select(a => new FSetEstimatedThroughputTime(a.Id + , GetCustomOrderTime(a.Id) + , a.Name)) + .ToList(); + + - var estimatedThroughPuts = products.Select(a => new FSetEstimatedThroughputTime(a.Id, initialTime, a.Name)) - .ToList(); var behave = Agents.SupervisorAgent.Behaviour.Factory.Default( dbNameProduction: DbProduction.DataBaseName.Value, diff --git a/Mate.Test/SimulationEnvironment/AgentSystem.cs b/Mate.Test/SimulationEnvironment/AgentSystem.cs index c49be108..eec32f2f 100644 --- a/Mate.Test/SimulationEnvironment/AgentSystem.cs +++ b/Mate.Test/SimulationEnvironment/AgentSystem.cs @@ -246,140 +246,124 @@ public static IEnumerable GetTestData() //[MemberData(nameof(GetTestData))] //public async Task SystemTestAsync(SimulationType simulationType, PriorityRule priorityRule, int simNr, int maxBucketSize, long throughput, int seed , ModelSize resourceModelSize, ModelSize setupModelSize, double arrivalRate, bool distributeSetupsExponentially, bool createMeasurements = false) - //[Theory] - //[InlineData(SimulationType.Queuing, 10, 0.20)] - //[InlineData(SimulationType.Default, 502, 0.10)] - //[InlineData(SimulationType.Default, 503, 0.15)] - //[InlineData(SimulationType.Default, 204, 0.10)] - //[InlineData(SimulationType.Default, 205, 0.10)] - //[InlineData(SimulationType.Default, 206, 0.10)] - //[InlineData(SimulationType.Default, 207, 0.10)] - //[InlineData(SimulationType.Default, 208, 0.10)] - - //[InlineData(SimulationType.Queuing, 10001, 0.00)] - //[InlineData(SimulationType.Queuing, 10002, 0.05)] - //[InlineData(SimulationType.Queuing, 10003, 0.10)] - //[InlineData(SimulationType.Queuing, 10004, 0.15)] - //[InlineData(SimulationType.Queuing, 10005, 0.20)] - //[InlineData(SimulationType.Queuing, 10006, 0.25)] - //[InlineData(SimulationType.Queuing, 10007, 0.30)] - //[InlineData(SimulationType.Queuing, 10008, 0.35)] - - //[InlineData(SimulationType.Queuing, 20004, 0.20)] - //[InlineData(SimulationType.Default, 20005, 0.20)] - //[InlineData(SimulationType.Default, 20001, 0.05)] - - //[InlineData(SimulationType.Default, 33111, 0.00)] - //[InlineData(SimulationType.Queuing, 20112, 0.00)] - //[InlineData(SimulationType.Queuing, 20113, 0.00)] - //[InlineData(SimulationType.Queuing, 20114, 0.00)] - //[InlineData(SimulationType.Queuing, 20115, 0.00)] - //[InlineData(SimulationType.Queuing, 20116, 0.00)] - //[InlineData(SimulationType.Queuing, 20117, 0.00)] - //[InlineData(SimulationType.Queuing, 20118, 0.00)] - // - //[InlineData(SimulationType.Default, 511, 0.05)] - //[InlineData(SimulationType.Queuing, 20512, 0.05)] - //[InlineData(SimulationType.Queuing, 20513, 0.05)] - //[InlineData(SimulationType.Queuing, 20514, 0.05)] - //[InlineData(SimulationType.Queuing, 20515, 0.05)] - //[InlineData(SimulationType.Queuing, 20516, 0.05)] - //[InlineData(SimulationType.Queuing, 20517, 0.05)] - //[InlineData(SimulationType.Queuing, 20518, 0.05)] - // - //[InlineData(SimulationType.Default, 1011, 0.10)] - //[InlineData(SimulationType.Queuing, 21012, 0.10)] - //[InlineData(SimulationType.Queuing, 21013, 0.10)] - //[InlineData(SimulationType.Queuing, 21014, 0.10)] - //[InlineData(SimulationType.Queuing, 21015, 0.10)] - //[InlineData(SimulationType.Queuing, 21016, 0.10)] - //[InlineData(SimulationType.Queuing, 21017, 0.10)] - //[InlineData(SimulationType.Queuing, 21018, 0.10)] - // - //[InlineData(SimulationType.Default, 1511, 0.15)] - //[InlineData(SimulationType.Queuing, 21512, 0.15)] - //[InlineData(SimulationType.Queuing, 21513, 0.15)] - //[InlineData(SimulationType.Queuing, 21514, 0.15)] - //[InlineData(SimulationType.Queuing, 21515, 0.15)] - //[InlineData(SimulationType.Queuing, 21516, 0.15)] - //[InlineData(SimulationType.Queuing, 21517, 0.15)] - //[InlineData(SimulationType.Queuing, 21518, 0.15)] - // - //[InlineData(SimulationType.Default, 2011, 0.20)] - //[InlineData(SimulationType.Queuing, 22012, 0.20)] - //[InlineData(SimulationType.Queuing, 22013, 0.20)] - //[InlineData(SimulationType.Queuing, 22014, 0.20)] - //[InlineData(SimulationType.Queuing, 22015, 0.20)] - //[InlineData(SimulationType.Queuing, 22016, 0.20)] - //[InlineData(SimulationType.Queuing, 22017, 0.20)] - //[InlineData(SimulationType.Queuing, 22018, 0.20)] - // - //[InlineData(SimulationType.Default, 2511, 0.25)] - //[InlineData(SimulationType.Queuing, 22512, 0.25)] - //[InlineData(SimulationType.Queuing, 22513, 0.25)] - //[InlineData(SimulationType.Queuing, 22514, 0.25)] - //[InlineData(SimulationType.Queuing, 22515, 0.25)] - //[InlineData(SimulationType.Queuing, 22516, 0.25)] - //[InlineData(SimulationType.Queuing, 22517, 0.25)] - //[InlineData(SimulationType.Queuing, 22518, 0.25)] - // - //[InlineData(SimulationType.Default, 3011, 0.30)] - //[InlineData(SimulationType.Queuing, 23012, 0.30)] - //[InlineData(SimulationType.Queuing, 23013, 0.30)] - //[InlineData(SimulationType.Queuing, 23014, 0.30)] - //[InlineData(SimulationType.Queuing, 23015, 0.30)] - //[InlineData(SimulationType.Queuing, 23016, 0.30)] - //[InlineData(SimulationType.Queuing, 23017, 0.30)] - //[InlineData(SimulationType.Queuing, 23018, 0.30)] - // + [Theory] - [InlineData(SimulationType.Central, 2500, 0.00, 0.035)] - [InlineData(SimulationType.Central, 2505, 0.05, 0.035)] - [InlineData(SimulationType.Central, 2510, 0.10, 0.035)] - [InlineData(SimulationType.Central, 2515, 0.15, 0.035)] - [InlineData(SimulationType.Central, 2520, 0.20, 0.035)] - [InlineData(SimulationType.Central, 2525, 0.25, 0.035)] - [InlineData(SimulationType.Central, 2530, 0.30, 0.035)] - [InlineData(SimulationType.Central, 2535, 0.35, 0.035)] - - //[InlineData(SimulationType.Default, 72, 2, 0.20, 0.0185)] - //[InlineData(SimulationType.Default, 74, 4, 0.20, 0.037)] - //[InlineData(SimulationType.Default, 76, 6, 0.20, 0.0555)] - //[InlineData(SimulationType.Default, 80, 8, 0.20, 0.074)] - //[InlineData(SimulationType.Queuing, 23516, 0.35)] - //[InlineData(SimulationType.Queuing, 23517, 0.35)] - //[InlineData(SimulationType.Queuing, 23518, 0.35)] - - //public static IEnumerable GetEvalData(SimulationType simulationType) - //{ - // var simNumber = 1000; - // // central 1000 - // // default 3000 - // // queue 4000 - // var deviation = 0.0; - // for (int i = 0; i < 8; i++) // run from 0.0 to 0.35 - // { - // for (int y = 0; y < 1; y++) // three runs each config - // { - // yield return new object[] - // { - // simulationType, //simulationType - // simNumber++, - // Math.Round(deviation,2) - // }; - // } - // deviation += 0.05; - // simNumber = (int)Math.Round((decimal)simNumber + 10) ; // make simnumber jump 100 - // } - //} - //[Theory] - //[MemberData(nameof(GetEvalData), SimulationType.Default)] - public async Task AgentSystemTest(SimulationType simulationType, int simNr, double deviation, double arrivalRateRun) + // [x] [InlineData(SimulationType.Default, 110, 0.00, 0.035, 1337)] // throughput dynamic ruled + [InlineData(SimulationType.Default, 111, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 112, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 113, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 114, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 115, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 116, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 117, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 118, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 119, 0.00, 0.035, 169)] + + [InlineData(SimulationType.Default, 121, 0.05, 0.035, 169)] + [InlineData(SimulationType.Default, 122, 0.05, 0.035, 169)] + [InlineData(SimulationType.Default, 123, 0.05, 0.035, 169)] + [InlineData(SimulationType.Default, 124, 0.05, 0.035, 169)] + [InlineData(SimulationType.Default, 125, 0.05, 0.035, 169)] + [InlineData(SimulationType.Default, 126, 0.05, 0.035, 169)] + [InlineData(SimulationType.Default, 127, 0.05, 0.035, 169)] + [InlineData(SimulationType.Default, 128, 0.05, 0.035, 169)] + [InlineData(SimulationType.Default, 129, 0.05, 0.035, 169)] + + [InlineData(SimulationType.Default, 131, 0.10, 0.035, 169)] + [InlineData(SimulationType.Default, 141, 0.15, 0.035, 169)] + [InlineData(SimulationType.Default, 151, 0.20, 0.035, 169)] + [InlineData(SimulationType.Default, 161, 0.25, 0.035, 169)] + [InlineData(SimulationType.Default, 171, 0.30, 0.035, 169)] + [InlineData(SimulationType.Default, 181, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Default, 1011, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 1031, 0.10, 0.035, 169)] + [InlineData(SimulationType.Default, 1041, 0.15, 0.035, 169)] + [InlineData(SimulationType.Default, 1051, 0.20, 0.035, 169)] + [InlineData(SimulationType.Default, 1061, 0.25, 0.035, 169)] + [InlineData(SimulationType.Default, 1071, 0.30, 0.035, 169)] + [InlineData(SimulationType.Default, 1081, 0.35, 0.035, 169)] + + + [InlineData(SimulationType.Default, 10010, 0.20, 0.035, 169, 5, 5, 2, 0.0)] + [InlineData(SimulationType.Default, 10011, 0.20, 0.035, 169, 5, 5, 2, 0.1)] + [InlineData(SimulationType.Default, 10012, 0.20, 0.035, 169, 5, 5, 2, 0.2)] + [InlineData(SimulationType.Default, 10013, 0.20, 0.035, 169, 5, 5, 2, 0.3)] + [InlineData(SimulationType.Default, 10014, 0.20, 0.035, 169, 5, 5, 2, 0.4)] + [InlineData(SimulationType.Default, 10015, 0.20, 0.035, 169, 5, 5, 2, 0.5)] + [InlineData(SimulationType.Default, 10016, 0.20, 0.035, 169, 5, 5, 2, 0.6)] + [InlineData(SimulationType.Default, 10017, 0.20, 0.035, 169, 5, 5, 2, 0.7)] + [InlineData(SimulationType.Default, 10018, 0.20, 0.035, 169, 5, 5, 2, 0.8)] + [InlineData(SimulationType.Default, 10019, 0.20, 0.035, 169, 5, 5, 2, 0.9)] + [InlineData(SimulationType.Default, 10020, 0.20, 0.035, 169, 5, 5, 2, 1)] + + [InlineData(SimulationType.Default, 10110, 0.20, 0.035, 169, 5, 1, 1.41, 0.0)] + [InlineData(SimulationType.Default, 10111, 0.20, 0.035, 169, 5, 1, 1.41, 0.1)] + [InlineData(SimulationType.Default, 10112, 0.20, 0.035, 169, 5, 1, 1.41, 0.2)] + [InlineData(SimulationType.Default, 10113, 0.20, 0.035, 169, 5, 1, 1.41, 0.3)] + [InlineData(SimulationType.Default, 10114, 0.20, 0.035, 169, 5, 1, 1.41, 0.4)] + [InlineData(SimulationType.Default, 10115, 0.20, 0.035, 169, 5, 1, 1.41, 0.5)] + [InlineData(SimulationType.Default, 10116, 0.20, 0.035, 169, 5, 1, 1.41, 0.6)] + [InlineData(SimulationType.Default, 10117, 0.20, 0.035, 169, 5, 1, 1.41, 0.7)] + [InlineData(SimulationType.Default, 10118, 0.20, 0.035, 169, 5, 1, 1.41, 0.8)] + [InlineData(SimulationType.Default, 10119, 0.20, 0.035, 169, 5, 1, 1.41, 0.9)] + [InlineData(SimulationType.Default, 10120, 0.20, 0.035, 169, 5, 1, 1.41, 1)] + + [InlineData(SimulationType.Queuing, 20010, 0.20, 0.035, 169, 5, 5, 2, 0.0)] + [InlineData(SimulationType.Queuing, 20011, 0.20, 0.035, 169, 5, 5, 2, 0.1)] + [InlineData(SimulationType.Queuing, 20012, 0.20, 0.035, 169, 5, 5, 2, 0.2)] + [InlineData(SimulationType.Queuing, 20013, 0.20, 0.035, 169, 5, 5, 2, 0.3)] + [InlineData(SimulationType.Queuing, 20014, 0.20, 0.035, 169, 5, 5, 2, 0.4)] + [InlineData(SimulationType.Queuing, 20015, 0.20, 0.035, 169, 5, 5, 2, 0.5)] + [InlineData(SimulationType.Queuing, 20016, 0.20, 0.035, 169, 5, 5, 2, 0.6)] + [InlineData(SimulationType.Queuing, 20017, 0.20, 0.035, 169, 5, 5, 2, 0.7)] + [InlineData(SimulationType.Queuing, 20018, 0.20, 0.035, 169, 5, 5, 2, 0.8)] + [InlineData(SimulationType.Queuing, 20019, 0.20, 0.035, 169, 5, 5, 2, 0.9)] + [InlineData(SimulationType.Queuing, 20020, 0.20, 0.035, 169, 5, 5, 2, 1)] + + [InlineData(SimulationType.Queuing, 20110, 0.20, 0.035, 169, 5, 1, 1.41, 0.0)] + [InlineData(SimulationType.Queuing, 20111, 0.20, 0.035, 169, 5, 1, 1.41, 0.1)] + [InlineData(SimulationType.Queuing, 20112, 0.20, 0.035, 169, 5, 1, 1.41, 0.2)] + [InlineData(SimulationType.Queuing, 20113, 0.20, 0.035, 169, 5, 1, 1.41, 0.3)] + [InlineData(SimulationType.Queuing, 20114, 0.20, 0.035, 169, 5, 1, 1.41, 0.4)] + [InlineData(SimulationType.Queuing, 20115, 0.20, 0.035, 169, 5, 1, 1.41, 0.5)] + [InlineData(SimulationType.Queuing, 20116, 0.20, 0.035, 169, 5, 1, 1.41, 0.6)] + [InlineData(SimulationType.Queuing, 20117, 0.20, 0.035, 169, 5, 1, 1.41, 0.7)] + [InlineData(SimulationType.Queuing, 20118, 0.20, 0.035, 169, 5, 1, 1.41, 0.8)] + [InlineData(SimulationType.Queuing, 20119, 0.20, 0.035, 169, 5, 1, 1.41, 0.9)] + [InlineData(SimulationType.Queuing, 20120, 0.20, 0.035, 169, 5, 1, 1.41, 1)] + + [InlineData(SimulationType.Central, 30010, 0.20, 0.035, 169, 5, 5, 2, 0.0)] + [InlineData(SimulationType.Central, 30011, 0.20, 0.035, 169, 5, 5, 2, 0.1)] + [InlineData(SimulationType.Central, 30012, 0.20, 0.035, 169, 5, 5, 2, 0.2)] + [InlineData(SimulationType.Central, 30013, 0.20, 0.035, 169, 5, 5, 2, 0.3)] + [InlineData(SimulationType.Central, 30014, 0.20, 0.035, 169, 5, 5, 2, 0.4)] + [InlineData(SimulationType.Central, 30015, 0.20, 0.035, 169, 5, 5, 2, 0.5)] + [InlineData(SimulationType.Central, 30016, 0.20, 0.035, 169, 5, 5, 2, 0.6)] + [InlineData(SimulationType.Central, 30017, 0.20, 0.035, 169, 5, 5, 2, 0.7)] + [InlineData(SimulationType.Central, 30018, 0.20, 0.035, 169, 5, 5, 2, 0.8)] + [InlineData(SimulationType.Central, 30019, 0.20, 0.035, 169, 5, 5, 2, 0.9)] + [InlineData(SimulationType.Central, 30020, 0.20, 0.035, 169, 5, 5, 2, 1)] + + [InlineData(SimulationType.Central, 30110, 0.20, 0.035, 169, 5, 1, 1.41, 0.0)] + [InlineData(SimulationType.Central, 30111, 0.20, 0.035, 169, 5, 1, 1.41, 0.1)] + [InlineData(SimulationType.Central, 30112, 0.20, 0.035, 169, 5, 1, 1.41, 0.2)] + [InlineData(SimulationType.Central, 30113, 0.20, 0.035, 169, 5, 1, 1.41, 0.3)] + [InlineData(SimulationType.Central, 30114, 0.20, 0.035, 169, 5, 1, 1.41, 0.4)] + [InlineData(SimulationType.Central, 30115, 0.20, 0.035, 169, 5, 1, 1.41, 0.5)] + [InlineData(SimulationType.Central, 30116, 0.20, 0.035, 169, 5, 1, 1.41, 0.6)] + [InlineData(SimulationType.Central, 30117, 0.20, 0.035, 169, 5, 1, 1.41, 0.7)] + [InlineData(SimulationType.Central, 30118, 0.20, 0.035, 169, 5, 1, 1.41, 0.8)] + [InlineData(SimulationType.Central, 30119, 0.20, 0.035, 169, 5, 1, 1.41, 0.9)] + [InlineData(SimulationType.Central, 30120, 0.20, 0.035, 169, 5, 1, 1.41, 1)] + + public async Task AgentSystemTest(SimulationType simulationType, int simNr, double deviation, double arrivalRateRun, int seed + , int seedDataGen = 5, double reuse = 1.3, double complxity = 1.9, double organziationaldegree = 0.7) { //var simNr = Random.Shared.Next(); //var simulationType = SimulationType.Default; - var seed = 169; - var throughput = 10080; + + var throughput = 1440 * 5; var arrivalRate = arrivalRateRun; //LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Trace, LogLevel.Trace); @@ -403,7 +387,11 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub //ResultDBInitializerBasic.DbInitialize(dbResult.DbContext); SeedInitializer seedInitializer = new SeedInitializer(); - seedInitializer.GenerateTestData(TestMateDb, machineCount: 4, toolCount: 6); + seedInitializer.GenerateTestData(TestMateDb, machineCount: 4, toolCount: 6 + , seed: seedDataGen + , reuseRatio: reuse + , complexityRatio: complxity + , organizationalDegree: organziationaldegree); //dbMaster.DbContext.Database.EnsureDeleted(); //dbMaster.DbContext.Database.EnsureCreated(); diff --git a/Mate.Test/SimulationEnvironment/SEEDInitializer.cs b/Mate.Test/SimulationEnvironment/SEEDInitializer.cs index 0ecb4e5a..2bc40092 100644 --- a/Mate.Test/SimulationEnvironment/SEEDInitializer.cs +++ b/Mate.Test/SimulationEnvironment/SEEDInitializer.cs @@ -25,7 +25,8 @@ public void Dispose() { } - public void GenerateTestData(string mateDbName, int machineCount, int toolCount) + public void GenerateTestData(string mateDbName, int machineCount, int toolCount + , int seed, double reuseRatio, double complexityRatio, double organizationalDegree) { //Generate Config @@ -33,15 +34,15 @@ public void GenerateTestData(string mateDbName, int machineCount, int toolCount) var materialConfig = new MaterialConfig() { StructureParameter = new StructureParameter() { - ComplexityRatio = 1.9, - ReuseRatio = 1.3, + ComplexityRatio = complexityRatio, // 1.9, + ReuseRatio = reuseRatio, // 1.3, NumberOfSalesMaterials = 100, VerticalIntegration = 4, - Seed = 5 + Seed = seed // 7 }, TransitionMatrixParameter = new TransitionMatrixParameter() { Lambda = 2, - OrganizationalDegree = 0.7 + OrganizationalDegree = organizationalDegree // 0.7 } }; From 961f01f2b8b01dcf0382a0507bd05c3e2eb82a2a Mon Sep 17 00:00:00 2001 From: Martin Krockert Date: Mon, 24 Oct 2022 16:00:54 +0200 Subject: [PATCH 10/16] Text Extension --- .../SimulationEnvironment/AgentSystem.cs | 274 +++++++++++++++--- 1 file changed, 239 insertions(+), 35 deletions(-) diff --git a/Mate.Test/SimulationEnvironment/AgentSystem.cs b/Mate.Test/SimulationEnvironment/AgentSystem.cs index eec32f2f..8176db11 100644 --- a/Mate.Test/SimulationEnvironment/AgentSystem.cs +++ b/Mate.Test/SimulationEnvironment/AgentSystem.cs @@ -249,41 +249,245 @@ public static IEnumerable GetTestData() [Theory] // [x] [InlineData(SimulationType.Default, 110, 0.00, 0.035, 1337)] // throughput dynamic ruled - [InlineData(SimulationType.Default, 111, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 112, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 113, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 114, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 115, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 116, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 117, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 118, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 119, 0.00, 0.035, 169)] - - [InlineData(SimulationType.Default, 121, 0.05, 0.035, 169)] - [InlineData(SimulationType.Default, 122, 0.05, 0.035, 169)] - [InlineData(SimulationType.Default, 123, 0.05, 0.035, 169)] - [InlineData(SimulationType.Default, 124, 0.05, 0.035, 169)] - [InlineData(SimulationType.Default, 125, 0.05, 0.035, 169)] - [InlineData(SimulationType.Default, 126, 0.05, 0.035, 169)] - [InlineData(SimulationType.Default, 127, 0.05, 0.035, 169)] - [InlineData(SimulationType.Default, 128, 0.05, 0.035, 169)] - [InlineData(SimulationType.Default, 129, 0.05, 0.035, 169)] - - [InlineData(SimulationType.Default, 131, 0.10, 0.035, 169)] - [InlineData(SimulationType.Default, 141, 0.15, 0.035, 169)] - [InlineData(SimulationType.Default, 151, 0.20, 0.035, 169)] - [InlineData(SimulationType.Default, 161, 0.25, 0.035, 169)] - [InlineData(SimulationType.Default, 171, 0.30, 0.035, 169)] - [InlineData(SimulationType.Default, 181, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Default, 1011, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 1031, 0.10, 0.035, 169)] - [InlineData(SimulationType.Default, 1041, 0.15, 0.035, 169)] - [InlineData(SimulationType.Default, 1051, 0.20, 0.035, 169)] - [InlineData(SimulationType.Default, 1061, 0.25, 0.035, 169)] - [InlineData(SimulationType.Default, 1071, 0.30, 0.035, 169)] - [InlineData(SimulationType.Default, 1081, 0.35, 0.035, 169)] - + [InlineData(SimulationType.Default, 91000, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 91010, 0.10, 0.035, 169)] + [InlineData(SimulationType.Default, 91020, 0.15, 0.035, 169)] + [InlineData(SimulationType.Default, 91030, 0.20, 0.035, 169)] + [InlineData(SimulationType.Default, 91040, 0.25, 0.035, 169)] + [InlineData(SimulationType.Default, 91050, 0.30, 0.035, 169)] + [InlineData(SimulationType.Default, 91060, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Default, 91001, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 91011, 0.10, 0.035, 169)] + [InlineData(SimulationType.Default, 91021, 0.15, 0.035, 169)] + [InlineData(SimulationType.Default, 91031, 0.20, 0.035, 169)] + [InlineData(SimulationType.Default, 91041, 0.25, 0.035, 169)] + [InlineData(SimulationType.Default, 91051, 0.30, 0.035, 169)] + [InlineData(SimulationType.Default, 91061, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Default, 91002, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 91012, 0.10, 0.035, 169)] + [InlineData(SimulationType.Default, 91022, 0.15, 0.035, 169)] + [InlineData(SimulationType.Default, 91032, 0.20, 0.035, 169)] + [InlineData(SimulationType.Default, 91042, 0.25, 0.035, 169)] + [InlineData(SimulationType.Default, 91052, 0.30, 0.035, 169)] + [InlineData(SimulationType.Default, 91062, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Default, 91003, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 91013, 0.10, 0.035, 169)] + [InlineData(SimulationType.Default, 91023, 0.15, 0.035, 169)] + [InlineData(SimulationType.Default, 91033, 0.20, 0.035, 169)] + [InlineData(SimulationType.Default, 91043, 0.25, 0.035, 169)] + [InlineData(SimulationType.Default, 91053, 0.30, 0.035, 169)] + [InlineData(SimulationType.Default, 91063, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Default, 91004, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 91014, 0.10, 0.035, 169)] + [InlineData(SimulationType.Default, 91024, 0.15, 0.035, 169)] + [InlineData(SimulationType.Default, 91034, 0.20, 0.035, 169)] + [InlineData(SimulationType.Default, 91044, 0.25, 0.035, 169)] + [InlineData(SimulationType.Default, 91054, 0.30, 0.035, 169)] + [InlineData(SimulationType.Default, 91064, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Default, 91005, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 91015, 0.10, 0.035, 169)] + [InlineData(SimulationType.Default, 91025, 0.15, 0.035, 169)] + [InlineData(SimulationType.Default, 91035, 0.20, 0.035, 169)] + [InlineData(SimulationType.Default, 91045, 0.25, 0.035, 169)] + [InlineData(SimulationType.Default, 91055, 0.30, 0.035, 169)] + [InlineData(SimulationType.Default, 91065, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Default, 91006, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 91016, 0.10, 0.035, 169)] + [InlineData(SimulationType.Default, 91026, 0.15, 0.035, 169)] + [InlineData(SimulationType.Default, 91036, 0.20, 0.035, 169)] + [InlineData(SimulationType.Default, 91046, 0.25, 0.035, 169)] + [InlineData(SimulationType.Default, 91056, 0.30, 0.035, 169)] + [InlineData(SimulationType.Default, 91066, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Default, 91007, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 91017, 0.10, 0.035, 169)] + [InlineData(SimulationType.Default, 91027, 0.15, 0.035, 169)] + [InlineData(SimulationType.Default, 91037, 0.20, 0.035, 169)] + [InlineData(SimulationType.Default, 91047, 0.25, 0.035, 169)] + [InlineData(SimulationType.Default, 91057, 0.30, 0.035, 169)] + [InlineData(SimulationType.Default, 91067, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Default, 91008, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 91018, 0.10, 0.035, 169)] + [InlineData(SimulationType.Default, 91028, 0.15, 0.035, 169)] + [InlineData(SimulationType.Default, 91038, 0.20, 0.035, 169)] + [InlineData(SimulationType.Default, 91048, 0.25, 0.035, 169)] + [InlineData(SimulationType.Default, 91058, 0.30, 0.035, 169)] + [InlineData(SimulationType.Default, 91068, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Default, 91009, 0.00, 0.035, 169)] + [InlineData(SimulationType.Default, 91019, 0.10, 0.035, 169)] + [InlineData(SimulationType.Default, 91029, 0.15, 0.035, 169)] + [InlineData(SimulationType.Default, 91039, 0.20, 0.035, 169)] + [InlineData(SimulationType.Default, 91049, 0.25, 0.035, 169)] + [InlineData(SimulationType.Default, 91059, 0.30, 0.035, 169)] + [InlineData(SimulationType.Default, 91069, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Queuing, 91000, 0.00, 0.035, 169)] + [InlineData(SimulationType.Queuing, 91010, 0.10, 0.035, 169)] + [InlineData(SimulationType.Queuing, 91020, 0.15, 0.035, 169)] + [InlineData(SimulationType.Queuing, 91030, 0.20, 0.035, 169)] + [InlineData(SimulationType.Queuing, 91040, 0.25, 0.035, 169)] + [InlineData(SimulationType.Queuing, 91050, 0.30, 0.035, 169)] + [InlineData(SimulationType.Queuing, 91060, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Queuing, 92001, 0.00, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92011, 0.10, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92021, 0.15, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92031, 0.20, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92041, 0.25, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92051, 0.30, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92061, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Queuing, 92002, 0.00, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92012, 0.10, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92022, 0.15, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92032, 0.20, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92042, 0.25, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92052, 0.30, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92062, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Queuing, 92003, 0.00, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92013, 0.10, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92023, 0.15, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92033, 0.20, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92043, 0.25, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92053, 0.30, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92063, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Queuing, 92004, 0.00, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92014, 0.10, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92024, 0.15, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92034, 0.20, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92044, 0.25, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92054, 0.30, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92064, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Queuing, 92005, 0.00, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92015, 0.10, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92025, 0.15, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92035, 0.20, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92045, 0.25, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92055, 0.30, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92065, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Queuing, 92006, 0.00, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92016, 0.10, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92026, 0.15, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92036, 0.20, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92046, 0.25, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92056, 0.30, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92066, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Queuing, 92007, 0.00, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92017, 0.10, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92027, 0.15, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92037, 0.20, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92047, 0.25, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92057, 0.30, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92067, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Queuing, 92008, 0.00, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92018, 0.10, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92028, 0.15, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92038, 0.20, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92048, 0.25, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92058, 0.30, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92068, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Queuing, 92009, 0.00, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92019, 0.10, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92029, 0.15, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92039, 0.20, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92049, 0.25, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92059, 0.30, 0.035, 169)] + [InlineData(SimulationType.Queuing, 92069, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Central, 93000, 0.00, 0.035, 169)] + [InlineData(SimulationType.Central, 93010, 0.10, 0.035, 169)] + [InlineData(SimulationType.Central, 93020, 0.15, 0.035, 169)] + [InlineData(SimulationType.Central, 93030, 0.20, 0.035, 169)] + [InlineData(SimulationType.Central, 93040, 0.25, 0.035, 169)] + [InlineData(SimulationType.Central, 93050, 0.30, 0.035, 169)] + [InlineData(SimulationType.Central, 93060, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Central, 93001, 0.00, 0.035, 169)] + [InlineData(SimulationType.Central, 93011, 0.10, 0.035, 169)] + [InlineData(SimulationType.Central, 93021, 0.15, 0.035, 169)] + [InlineData(SimulationType.Central, 93031, 0.20, 0.035, 169)] + [InlineData(SimulationType.Central, 93041, 0.25, 0.035, 169)] + [InlineData(SimulationType.Central, 93051, 0.30, 0.035, 169)] + [InlineData(SimulationType.Central, 93061, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Central, 93002, 0.00, 0.035, 169)] + [InlineData(SimulationType.Central, 93012, 0.10, 0.035, 169)] + [InlineData(SimulationType.Central, 93022, 0.15, 0.035, 169)] + [InlineData(SimulationType.Central, 93032, 0.20, 0.035, 169)] + [InlineData(SimulationType.Central, 93042, 0.25, 0.035, 169)] + [InlineData(SimulationType.Central, 93052, 0.30, 0.035, 169)] + [InlineData(SimulationType.Central, 93062, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Central, 93003, 0.00, 0.035, 169)] + [InlineData(SimulationType.Central, 93013, 0.10, 0.035, 169)] + [InlineData(SimulationType.Central, 93023, 0.15, 0.035, 169)] + [InlineData(SimulationType.Central, 93033, 0.20, 0.035, 169)] + [InlineData(SimulationType.Central, 93043, 0.25, 0.035, 169)] + [InlineData(SimulationType.Central, 93053, 0.30, 0.035, 169)] + [InlineData(SimulationType.Central, 93063, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Central, 93004, 0.00, 0.035, 169)] + [InlineData(SimulationType.Central, 93014, 0.10, 0.035, 169)] + [InlineData(SimulationType.Central, 93024, 0.15, 0.035, 169)] + [InlineData(SimulationType.Central, 93034, 0.20, 0.035, 169)] + [InlineData(SimulationType.Central, 93044, 0.25, 0.035, 169)] + [InlineData(SimulationType.Central, 93054, 0.30, 0.035, 169)] + [InlineData(SimulationType.Central, 93064, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Central, 93005, 0.00, 0.035, 169)] + [InlineData(SimulationType.Central, 93015, 0.10, 0.035, 169)] + [InlineData(SimulationType.Central, 93025, 0.15, 0.035, 169)] + [InlineData(SimulationType.Central, 93035, 0.20, 0.035, 169)] + [InlineData(SimulationType.Central, 93045, 0.25, 0.035, 169)] + [InlineData(SimulationType.Central, 93055, 0.30, 0.035, 169)] + [InlineData(SimulationType.Central, 93065, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Central, 93006, 0.00, 0.035, 169)] + [InlineData(SimulationType.Central, 93016, 0.10, 0.035, 169)] + [InlineData(SimulationType.Central, 93026, 0.15, 0.035, 169)] + [InlineData(SimulationType.Central, 93036, 0.20, 0.035, 169)] + [InlineData(SimulationType.Central, 93046, 0.25, 0.035, 169)] + [InlineData(SimulationType.Central, 93056, 0.30, 0.035, 169)] + [InlineData(SimulationType.Central, 93066, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Central, 93007, 0.00, 0.035, 169)] + [InlineData(SimulationType.Central, 93017, 0.10, 0.035, 169)] + [InlineData(SimulationType.Central, 93027, 0.15, 0.035, 169)] + [InlineData(SimulationType.Central, 93037, 0.20, 0.035, 169)] + [InlineData(SimulationType.Central, 93047, 0.25, 0.035, 169)] + [InlineData(SimulationType.Central, 93057, 0.30, 0.035, 169)] + [InlineData(SimulationType.Central, 93067, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Central, 93008, 0.00, 0.035, 169)] + [InlineData(SimulationType.Central, 93018, 0.10, 0.035, 169)] + [InlineData(SimulationType.Central, 93028, 0.15, 0.035, 169)] + [InlineData(SimulationType.Central, 93038, 0.20, 0.035, 169)] + [InlineData(SimulationType.Central, 93048, 0.25, 0.035, 169)] + [InlineData(SimulationType.Central, 93058, 0.30, 0.035, 169)] + [InlineData(SimulationType.Central, 93068, 0.35, 0.035, 169)] + + [InlineData(SimulationType.Central, 93009, 0.00, 0.035, 169)] + [InlineData(SimulationType.Central, 93019, 0.10, 0.035, 169)] + [InlineData(SimulationType.Central, 93029, 0.15, 0.035, 169)] + [InlineData(SimulationType.Central, 93039, 0.20, 0.035, 169)] + [InlineData(SimulationType.Central, 93049, 0.25, 0.035, 169)] + [InlineData(SimulationType.Central, 93059, 0.30, 0.035, 169)] + [InlineData(SimulationType.Central, 93069, 0.35, 0.035, 169)] [InlineData(SimulationType.Default, 10010, 0.20, 0.035, 169, 5, 5, 2, 0.0)] [InlineData(SimulationType.Default, 10011, 0.20, 0.035, 169, 5, 5, 2, 0.1)] From aafa6c0e5598df0c536fb77ef945c422beffb383 Mon Sep 17 00:00:00 2001 From: Martin Krockert Date: Mon, 24 Oct 2022 22:50:45 +0200 Subject: [PATCH 11/16] Bugfix : Added Material Kreditor --- Mate.DataCore/Data/Seed/MaterialTransformer.cs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Mate.DataCore/Data/Seed/MaterialTransformer.cs b/Mate.DataCore/Data/Seed/MaterialTransformer.cs index 5e89d7ff..cc9abce4 100644 --- a/Mate.DataCore/Data/Seed/MaterialTransformer.cs +++ b/Mate.DataCore/Data/Seed/MaterialTransformer.cs @@ -13,6 +13,7 @@ namespace Mate.DataCore.Data.Seed public class MaterialTransformer { public static string BUSINESS_PARTNER_1 { get; private set; } = "BUSINESS_PARTNER_1"; + public static string BUSINESS_PARTNER_2 { get; private set; } = "BUSINESS_PARTNER_2"; public static void Transform(MateDb mateDb, Materials materials, DynamicInitializer.Tables.MasterTableResourceCapability masterTableCapabilities) { @@ -87,7 +88,8 @@ private static M_BusinessPartner[] CreateBusinessPartners(MateDb mateDb) { var businessPartners = new M_BusinessPartner[] { - new M_BusinessPartner() {Debitor = true, Kreditor = false, Name = BUSINESS_PARTNER_1} + new M_BusinessPartner() {Debitor = true, Kreditor = false, Name = BUSINESS_PARTNER_1}, + new M_BusinessPartner() {Debitor = false, Kreditor = true, Name = BUSINESS_PARTNER_2} }; mateDb.BusinessPartners.AddRange(businessPartners); mateDb.SaveChanges(); @@ -161,18 +163,18 @@ private static void CreateStocks(MateDb mateDb, M_BusinessPartner businessPartne { ArticleForeignKey = article.Id, Name = "Stock: " + article.Name, - Min = article.ToPurchase ? 500 : 0, + Min = article.ToPurchase ? 5000 : 0, Max = 10000, - Current = article.ToPurchase ? 1000 : 0, - StartValue = article.ToPurchase ? 1000 : 0, + Current = article.ToPurchase ? 10000 : 0, + StartValue = article.ToPurchase ? 10000 : 0, }); articleToBusinessPartners.Add( new M_ArticleToBusinessPartner { BusinessPartnerId = businessPartners.Id, ArticleId = article.Id, - PackSize = 1000, - Price = 1000 * article.Price, + PackSize = 5000, + Price = 5000 * article.Price, TimeToDelivery = 1440 }); } From eb3a39ab548f81e15a1baeb5f1b8419120c80485 Mon Sep 17 00:00:00 2001 From: Martin Krockert Date: Tue, 25 Jul 2023 10:50:51 +0200 Subject: [PATCH 12/16] Model Change with Worker and Stability Issues (Serializing takes too long.) --- .../Tables/MasterTableResource.cs | 58 +- .../CollectorAgent/Collector.Analytics.Job.cs | 4 +- .../CollectorAgent/Types/StabilityManager.cs | 4 +- .../Agents/HubAgent/Behaviour/Queuing.cs | 40 +- .../HubAgent/Types/Queuing/JobManager.cs | 50 +- .../HubAgent/Types/Queuing/JobTracker.cs | 95 +++ .../Queuing/TotalQueueStabilityManager.cs | 26 + .../ResourceAgent/Types/JobInProgress.cs | 22 +- .../SimulationEnvironment/AgentSystem.cs | 649 +++++++++--------- 9 files changed, 524 insertions(+), 424 deletions(-) create mode 100644 Mate.Production.Core/Agents/HubAgent/Types/Queuing/JobTracker.cs create mode 100644 Mate.Production.Core/Agents/HubAgent/Types/Queuing/TotalQueueStabilityManager.cs diff --git a/Mate.DataCore/Data/DynamicInitializer/Tables/MasterTableResource.cs b/Mate.DataCore/Data/DynamicInitializer/Tables/MasterTableResource.cs index c3bcaf8e..680f9654 100644 --- a/Mate.DataCore/Data/DynamicInitializer/Tables/MasterTableResource.cs +++ b/Mate.DataCore/Data/DynamicInitializer/Tables/MasterTableResource.cs @@ -2,6 +2,7 @@ using System.Linq; using Mate.DataCore.Data.Context; using Mate.DataCore.DataModel; +using Mate.DataCore.Nominal.Model; namespace Mate.DataCore.Data.DynamicInitializer.Tables { @@ -47,50 +48,73 @@ internal void CreateResourceTools(List resourceProperties) for (int i = 0; i < resourceProperties.Count; i++) { CreateTools(_capability.Capabilities[i], resourceProperties[i].SetupTime, - resourceProperties[i].OperatorCount); + resourceProperties[i].OperatorCount, limitedTools: false, numberOfWorker: 3); } } //was sind operators? -> Personen, die Maschinen umrüsten - private void CreateTools(M_ResourceCapability capability, long setupTime, int numberOfOperators) + private void CreateTools(M_ResourceCapability capability, long setupTime, int numberOfOperators, bool limitedTools = false, int numberOfWorker = 0) { List tools = new List(); List setups = new List(); List capabilityProviders = new List(); List operators = new List(); + List workers = new List(); for (int i = 1; i < 1 + numberOfOperators; i++) { operators.Add(CreateNewResource(capability.Name + " Operator " + i, true, true, capability.Name)); } + for (int i = 1; i < 1 + numberOfWorker; i++) + { + workers.Add(CreateNewResource(capability.Name + " Worker " + i, true, true, capability.Name)); + } + + var numberOfTools = _capability.Capabilities + .Single(x => x.Name == capability.Name) + .ChildResourceCapabilities.Count(); + + for (int i = 0; i < numberOfTools; i++) + { + var tool = CreateNewResource($"Tool {capability.Name} {i}", false, false, null); + tools.Add(tool); + } + foreach (var resource in CapabilityToResourceDict.Single(x => x.Key == capability.Name).Value) { if (operators.Count > 0) { - foreach (var op in operators) + var nTool = 0; + foreach (var subCapability in _capability.Capabilities + .Single(x => x.Name == capability.Name) + .ChildResourceCapabilities) { - foreach (var subCapability in _capability.Capabilities - .Single(x => x.Name == capability.Name) - .ChildResourceCapabilities) + + foreach (var op in operators) { + foreach(var worker in workers) { var capabilityProvider = new M_ResourceCapabilityProvider() { Name = $"Provides {subCapability.Name} {resource.Name}", ResourceCapabilityId = subCapability.Id, }; - var tool = CreateNewResource($"Tool {resource.Name} {subCapability.Name}", false, false, null); - tools.Add(tool); - - setups.Add(CreateNewSetup(op, capabilityProvider, false, true, 0)); - setups.Add(CreateNewSetup(tool, capabilityProvider, true, true, setupTime)); - setups.Add(CreateNewSetup(resource, capabilityProvider, true, true, 0)); - capabilityProviders.Add(capabilityProvider); + // var tool = CreateNewResource($"Tool {resource.Name} {subCapability.Name}", false, false, null); + // tools.Add(tool); + + setups.Add(CreateNewSetup(op, capabilityProvider, false, true, 0)); + setups.Add(CreateNewSetup(tools[nTool], capabilityProvider, true, true, setupTime)); + setups.Add(CreateNewSetup(resource, capabilityProvider, true, true, 0)); + setups.Add(CreateNewSetup(worker, capabilityProvider, true, false, 0)); + capabilityProviders.Add(capabilityProvider); + } } + nTool++; } } else { + var nTool = 0; foreach (var subCapability in _capability.Capabilities .Single(x => x.Name == capability.Name) .ChildResourceCapabilities) @@ -100,18 +124,20 @@ private void CreateTools(M_ResourceCapability capability, long setupTime, int nu Name = $"Provides {subCapability.Name} {resource.Name}", ResourceCapabilityId = subCapability.Id, }; - var tool = CreateNewResource($"Tool {resource.Name} {subCapability.Name}", false, false, null); - tools.Add(tool); + //var tool = CreateNewResource($"Tool {resource.Name} {subCapability.Name}", false, false, null); + //tools.Add(tool); - setups.Add(CreateNewSetup(tool, capabilityProvider, true, true, setupTime)); + setups.Add(CreateNewSetup(tools[nTool], capabilityProvider, true, true, setupTime)); setups.Add(CreateNewSetup(resource, capabilityProvider, true, true, 0)); capabilityProviders.Add(capabilityProvider); + nTool++; } } CapabilityProviderDict.Add($"{resource.Name} Tooling", capabilityProviders); CapabilityToSetupDict.Add($"{resource.Name} Tooling", setups); CapabilityToResourceDict.Add($"{resource.Name} Tooling", tools); CapabilityToResourceDict.Add($"{resource.Name} Operators", operators); + CapabilityToResourceDict.Add($"{resource.Name} Worker", workers); } } diff --git a/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs b/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs index 327f99e7..a2f2c165 100644 --- a/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs +++ b/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs @@ -210,8 +210,8 @@ private void WriteOperationKeys(bool finalCall) if (finalCall && StabilityManager.Instance.HasEntries) { //StabilityManager.Instance.WriteFile(Collector.Config.GetOption().Value); - //var keyValueDic = StabilityManager.Instance.DoSomeStatistics(Collector.Config.GetOption().Value, Collector.Config.GetOption().Value); - //Collector.Kpis.AddRange(keyValueDic); + var keyValueDic = StabilityManager.Instance.DoSomeStatistics(Collector.Config.GetOption().Value, Collector.Config.GetOption().Value); + Collector.Kpis.AddRange(keyValueDic); } } diff --git a/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs b/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs index b464576a..bd9ddc22 100644 --- a/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs +++ b/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs @@ -45,14 +45,14 @@ public void AddEntryForOperation(long time, string operationKey, int position, s public void WriteFile(int simNum) { - string fileName = $"D:\\Work\\Data\\OperationDictionary{simNum.ToString()}.json"; + string fileName = $"F:\\Work\\Data\\OperationDictionary{simNum}.json"; string jsonString = JsonSerializer.Serialize(OperationDictionary); File.WriteAllText(fileName, jsonString); } public void ReadFile() { - string fileName = "D:\\Work\\Data\\OperationDictionary.json"; + string fileName = "F:\\Work\\Data\\OperationDictionary.json"; string jsonString = File.ReadAllText(fileName); OperationDictionary = JsonSerializer.Deserialize>>(jsonString)!; diff --git a/Mate.Production.Core/Agents/HubAgent/Behaviour/Queuing.cs b/Mate.Production.Core/Agents/HubAgent/Behaviour/Queuing.cs index f9d74ea6..f37c495f 100644 --- a/Mate.Production.Core/Agents/HubAgent/Behaviour/Queuing.cs +++ b/Mate.Production.Core/Agents/HubAgent/Behaviour/Queuing.cs @@ -93,26 +93,6 @@ private void EnqueueJob(IJob job) //Dequeue behind the new jobs prio - (var followingJobs, var counterPreviousJobs , var durationPreviousJobs) = _jobManager.GetPostionOfJob(job, Agent.CurrentTime); - - foreach (var followingJob in followingJobs.OrderBy(x => x.Priority(Agent.CurrentTime))) - { - if (followingJobs.Count() == 0) - break; - - if (followingJob.Key.Equals(job.Key)) - continue; - - AddToStabilityManager(followingJob.Key, durationPreviousJobs, counterPreviousJobs, String.Empty, Process.Dequeue); - - AddToStabilityManager(followingJob.Key, durationPreviousJobs + operation.Operation.Duration, counterPreviousJobs + 1, String.Empty, Process.Enqueue); - - //add current job to counters for next jobs in followingjobs - counterPreviousJobs += 1; - durationPreviousJobs += followingJob.Duration; - - } - _jobManager.SetJob(job, Agent.CurrentTime); //Enqueue behing the new jobs prio @@ -265,6 +245,8 @@ private void DoWork(Guid queueKey, IJob job) // AddToStabilityManager(rescheduledJob.Key, jobpostion.Item1 - fristJobInQueue.Duration, jobpostion.Item2 - 1, String.Empty, Process.Enqueue); //} var nextJob = jobQueue.Dequeue(Agent.CurrentTime); + _jobManager.RemoveFromJobTracker(nextJob, this.Agent.CurrentTime); + var operation = nextJob as FOperation; @@ -376,23 +358,5 @@ private void CreateOperationResults(IQueueingJob fQueuingJob) Agent.Send(BasicInstruction.FinishJob.Create(fOperationResult, job.ProductionAgent)); } - - private void AddToStabilityManager(Guid key, long scopeStart, int position, string resource, Process process) - { - var operationKeys = new List() { key.ToString() }; - var pub = new FCreateStabilityMeasurements.FCreateStabilityMeasurement( - keys: operationKeys - , time: Agent.CurrentTime - , position: position - , resource: resource - , start: scopeStart - , process: process.ToString() - ); - - Agent.Context.System.EventStream.Publish(@event: pub); - - } - } - } diff --git a/Mate.Production.Core/Agents/HubAgent/Types/Queuing/JobManager.cs b/Mate.Production.Core/Agents/HubAgent/Types/Queuing/JobManager.cs index 7740cb9a..5673086e 100644 --- a/Mate.Production.Core/Agents/HubAgent/Types/Queuing/JobManager.cs +++ b/Mate.Production.Core/Agents/HubAgent/Types/Queuing/JobManager.cs @@ -8,6 +8,7 @@ namespace Mate.Production.Core.Agents.HubAgent.Types.Queuing { public class JobManager { + JobTracker _jobTracker = new (); private List _pendingJobList { get; set; } = new List(); private CapabilityJobStorage _capabilityJobStorage { get; } private List _activeJobList { get; } = new List(); @@ -29,17 +30,7 @@ public void SetJob(IJob job, long currentTime) } _pendingJobList.Add(job); - - } - - public void Add(IJob job) - { - _pendingJobList.Add(job); - } - - public List GetNextJobQueues(long currentTime) - { - return _capabilityJobStorage.GetJobQueues(currentTime); + _jobTracker.Add(job, currentTime); } public List GetAllJobQueues(long currentTime, List availableCapabilities) @@ -75,38 +66,13 @@ internal void Remove(JobQueue jobQueue) _capabilityJobStorage.Remove(jobQueue); } - /// - /// - /// - /// - /// - /// - /// List followingJobs - /// int counterPreviousJobs - /// long durationPreviousJobs - /// - public (List, int, long) GetPostionOfJob(IJob job, long currentTime) - { - //int counterPreviousJobs = _activeJobList.Sum(x => x.JobQueue.Count()); - //long durationPreviousJobs = _activeJobList.Sum(x => x.JobQueue.Sum(y => y.Duration)); - var counterPreviousJobs = 0; - var durationPreviousJobs = 0L; - var followingJobs = new List(); - - var capabilityQueue = _capabilityJobStorage.GetJobQueue(job.RequiredCapability.Id); - - if(capabilityQueue != null) - { - var previousJobs = capabilityQueue.Where(x => x.Priority(currentTime) <= job.Priority(currentTime)); - - counterPreviousJobs = previousJobs.Count(); - durationPreviousJobs = previousJobs.Sum(x => x.Duration); - - followingJobs = capabilityQueue.Where(x => x.Priority(currentTime) > job.Priority(currentTime)).ToList(); - } - return (followingJobs, counterPreviousJobs, durationPreviousJobs); - + internal void RemoveFromJobTracker(IJob job, long time) { + _jobTracker.Remove(job, time); + } + internal void TrackJobs(long time) + { + _jobTracker.TrackJobs(time); } } diff --git a/Mate.Production.Core/Agents/HubAgent/Types/Queuing/JobTracker.cs b/Mate.Production.Core/Agents/HubAgent/Types/Queuing/JobTracker.cs new file mode 100644 index 00000000..355a1c86 --- /dev/null +++ b/Mate.Production.Core/Agents/HubAgent/Types/Queuing/JobTracker.cs @@ -0,0 +1,95 @@ +using Microsoft.EntityFrameworkCore.Query.Internal; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static IJobs; + +namespace Mate.Production.Core.Agents.HubAgent.Types.Queuing +{ + internal class JobTracker + { + //private List _jobs { get; set; } = new List(); + private Dictionary> JobDict { get; set; } = new Dictionary>(); + + StreamWriter fs = File.AppendText("C:\\temp\\queuelog_latest.csv"); + StreamWriter fsl = File.AppendText("C:\\temp\\queueLength_log_latest.csv"); + + + private List GetJobs(IJob job) + { + JobDict.TryGetValue(job.RequiredCapability.Name, out List jobs); + jobs ??= new List(); + return jobs; + } + + private void SetJobs(List jobs, string name) + { + JobDict.Remove(name); + JobDict.Add(name, jobs); + } + + private void WriteChangeSet(long time, string operation, List _jobs, string name) + { + var sorted = _jobs.Select((x, i) => new Tuple(x, i)) + .GroupBy(x => (x.Item1.StartConditions.Satisfied.ToString() + x.Item1.RequiredCapability.Id)) + .OrderByDescending(x => x.Key) + .ThenBy(x => x.Min(y => y.Item1.Priority(time))) + .SelectMany(x => x) + .Select((x, i) => new Tuple(i, x.Item1, Math.Abs(x.Item2 - i))); + + // var sorted = _jobs + // .Select((x, i) => new KeyValuePair(x, i)) + // .OrderByDescending(x => x.Key.StartConditions).ThenBy(x => x.Key.RequiredCapability).ThenBy(x => x.Key.Priority(time)) + // //.OrderBy(x => x.Key.Priority(time)) + // .Select((x, i) => new Tuple(x.Key, i - x.Value, i)) + // .ToList(); + + + _jobs = sorted.Select(x => x.Item2).ToList(); + SetJobs(_jobs, name); + + var output = name + ";" + _jobs.Count + ";" + operation + ";" ; + foreach (var d in sorted) + output = string.Concat(output, d.Item3, ";"); + fs.WriteLine(output); + + + var outputL = time + ";"; + var qlength = 0; + foreach (var keyValuePair in JobDict) { + qlength += keyValuePair.Value.Count; + } + qlength /= JobDict.Values.Count; + outputL = string.Concat(outputL, qlength, ";"); + fsl.WriteLine(outputL); + // System.Console.WriteLine("---- distance"); + //foreach (var d in sorted) + // System.Console.WriteLine("Original Pos " + d.Item3 + " Distance " + d.Item1 + " Value " + d.Item2.Prio); + + } + + public void Add(IJob job, long time) + { + var _jobs = GetJobs(job); + _jobs.RemoveAll(x => x.Key.Equals(job.Key)); + _jobs.Add(job); + + WriteChangeSet(time, "Add", _jobs, job.RequiredCapability.Name); + } + + public void Remove(IJob job, long time) + { + var _jobs = GetJobs(job); + _jobs.RemoveAll(x => x.Key.Equals(job.Key)); + WriteChangeSet(time, "Remove", _jobs, job.RequiredCapability.Name); + } + + public void TrackJobs(long time) => WriteChangeSet(time, "Sort", null, null); + + + } +} diff --git a/Mate.Production.Core/Agents/HubAgent/Types/Queuing/TotalQueueStabilityManager.cs b/Mate.Production.Core/Agents/HubAgent/Types/Queuing/TotalQueueStabilityManager.cs new file mode 100644 index 00000000..0b5e5f82 --- /dev/null +++ b/Mate.Production.Core/Agents/HubAgent/Types/Queuing/TotalQueueStabilityManager.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using System.Linq; +using static IJobs; + +namespace Mate.Production.Core.Agents.HubAgent.Types.Queuing +{ + internal class TotalQueueStabilityManager + { + List _jobs = new(); + + public int AddJob(IJob job, long time) { + _jobs.Add(job); + return GetIndexOf(job, time); + } + + private int GetIndexOf(IJob job, long time) { + return _jobs.OrderBy(x => x.Priority(time)).ToList().IndexOf(job); + } + + public int RemoveJob(IJob job, long time) { + var pos = GetIndexOf(job, time); + _jobs.RemoveAt(pos); + return pos; + } + } +} diff --git a/Mate.Production.Core/Agents/ResourceAgent/Types/JobInProgress.cs b/Mate.Production.Core/Agents/ResourceAgent/Types/JobInProgress.cs index c2d7ef76..7413e1ff 100644 --- a/Mate.Production.Core/Agents/ResourceAgent/Types/JobInProgress.cs +++ b/Mate.Production.Core/Agents/ResourceAgent/Types/JobInProgress.cs @@ -3,6 +3,7 @@ using System.Linq; using Akka.Actor; using Mate.DataCore.DataModel; +using MathNet.Numerics.Statistics; using static FBuckets; using static FOperations; using static IConfirmations; @@ -83,30 +84,29 @@ public int GetTotalOperationsOfJobInProgress() operations += ((FBucket)Current.Job).Operations.Count(); } IJob element = null; - for (int i = 0; i < ReadyElements.Count(); i++) + foreach (var item in ReadyElements) { //Gehe solange über die Liste, bis du das Element in den Operationen gefunden hast - while(element == null) + while (element == null) { - element = ((FBucket)ReadyElements[i].Job).Operations.SingleOrDefault(x => x.Key.Equals(operationId)); + var tmp = item.Value.Job as FBucket; + element = tmp.Operations.SingleOrDefault(x => x.Key.Equals(operationId)); + //((FBucket)ReadyElements.ToArray()[i].Job).Operations.SingleOrDefault(x => x.Key.Equals(operationId)); //Wenn das Element noch nicht in der Liste ist, nimm alle Operationen aus dieser Liste if (element == null) - { - operations += ((FBucket)ReadyElements[i].Job).Operations.Count(); - continue; + { + operations += tmp.Operations.Count; + break; } var jobPrio = element.Priority(currentTime); - operations += ((FBucket)ReadyElements[i].Job).Operations.Count(x => ((IJob)x).Priority(currentTime) < jobPrio); - durationOperations += ((FBucket)ReadyElements[i].Job).Operations.Where(x => ((IJob)x).Priority(currentTime) < jobPrio).Sum(y => y.Operation.Duration); + operations += tmp.Operations.Count(x => ((IJob)x).Priority(currentTime) < jobPrio); + durationOperations += tmp.Operations.Where(x => ((IJob)x).Priority(currentTime) < jobPrio).Sum(y => y.Operation.Duration); } - } - } - return (durationOperations, operations); } diff --git a/Mate.Test/SimulationEnvironment/AgentSystem.cs b/Mate.Test/SimulationEnvironment/AgentSystem.cs index 8176db11..4a33f17f 100644 --- a/Mate.Test/SimulationEnvironment/AgentSystem.cs +++ b/Mate.Test/SimulationEnvironment/AgentSystem.cs @@ -249,317 +249,340 @@ public static IEnumerable GetTestData() [Theory] // [x] [InlineData(SimulationType.Default, 110, 0.00, 0.035, 1337)] // throughput dynamic ruled - [InlineData(SimulationType.Default, 91000, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 91010, 0.10, 0.035, 169)] - [InlineData(SimulationType.Default, 91020, 0.15, 0.035, 169)] - [InlineData(SimulationType.Default, 91030, 0.20, 0.035, 169)] - [InlineData(SimulationType.Default, 91040, 0.25, 0.035, 169)] - [InlineData(SimulationType.Default, 91050, 0.30, 0.035, 169)] - [InlineData(SimulationType.Default, 91060, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Default, 91001, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 91011, 0.10, 0.035, 169)] - [InlineData(SimulationType.Default, 91021, 0.15, 0.035, 169)] - [InlineData(SimulationType.Default, 91031, 0.20, 0.035, 169)] - [InlineData(SimulationType.Default, 91041, 0.25, 0.035, 169)] - [InlineData(SimulationType.Default, 91051, 0.30, 0.035, 169)] - [InlineData(SimulationType.Default, 91061, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Default, 91002, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 91012, 0.10, 0.035, 169)] - [InlineData(SimulationType.Default, 91022, 0.15, 0.035, 169)] - [InlineData(SimulationType.Default, 91032, 0.20, 0.035, 169)] - [InlineData(SimulationType.Default, 91042, 0.25, 0.035, 169)] - [InlineData(SimulationType.Default, 91052, 0.30, 0.035, 169)] - [InlineData(SimulationType.Default, 91062, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Default, 91003, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 91013, 0.10, 0.035, 169)] - [InlineData(SimulationType.Default, 91023, 0.15, 0.035, 169)] - [InlineData(SimulationType.Default, 91033, 0.20, 0.035, 169)] - [InlineData(SimulationType.Default, 91043, 0.25, 0.035, 169)] - [InlineData(SimulationType.Default, 91053, 0.30, 0.035, 169)] - [InlineData(SimulationType.Default, 91063, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Default, 91004, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 91014, 0.10, 0.035, 169)] - [InlineData(SimulationType.Default, 91024, 0.15, 0.035, 169)] - [InlineData(SimulationType.Default, 91034, 0.20, 0.035, 169)] - [InlineData(SimulationType.Default, 91044, 0.25, 0.035, 169)] - [InlineData(SimulationType.Default, 91054, 0.30, 0.035, 169)] - [InlineData(SimulationType.Default, 91064, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Default, 91005, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 91015, 0.10, 0.035, 169)] - [InlineData(SimulationType.Default, 91025, 0.15, 0.035, 169)] - [InlineData(SimulationType.Default, 91035, 0.20, 0.035, 169)] - [InlineData(SimulationType.Default, 91045, 0.25, 0.035, 169)] - [InlineData(SimulationType.Default, 91055, 0.30, 0.035, 169)] - [InlineData(SimulationType.Default, 91065, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Default, 91006, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 91016, 0.10, 0.035, 169)] - [InlineData(SimulationType.Default, 91026, 0.15, 0.035, 169)] - [InlineData(SimulationType.Default, 91036, 0.20, 0.035, 169)] - [InlineData(SimulationType.Default, 91046, 0.25, 0.035, 169)] - [InlineData(SimulationType.Default, 91056, 0.30, 0.035, 169)] - [InlineData(SimulationType.Default, 91066, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Default, 91007, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 91017, 0.10, 0.035, 169)] - [InlineData(SimulationType.Default, 91027, 0.15, 0.035, 169)] - [InlineData(SimulationType.Default, 91037, 0.20, 0.035, 169)] - [InlineData(SimulationType.Default, 91047, 0.25, 0.035, 169)] - [InlineData(SimulationType.Default, 91057, 0.30, 0.035, 169)] - [InlineData(SimulationType.Default, 91067, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Default, 91008, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 91018, 0.10, 0.035, 169)] - [InlineData(SimulationType.Default, 91028, 0.15, 0.035, 169)] - [InlineData(SimulationType.Default, 91038, 0.20, 0.035, 169)] - [InlineData(SimulationType.Default, 91048, 0.25, 0.035, 169)] - [InlineData(SimulationType.Default, 91058, 0.30, 0.035, 169)] - [InlineData(SimulationType.Default, 91068, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Default, 91009, 0.00, 0.035, 169)] - [InlineData(SimulationType.Default, 91019, 0.10, 0.035, 169)] - [InlineData(SimulationType.Default, 91029, 0.15, 0.035, 169)] - [InlineData(SimulationType.Default, 91039, 0.20, 0.035, 169)] - [InlineData(SimulationType.Default, 91049, 0.25, 0.035, 169)] - [InlineData(SimulationType.Default, 91059, 0.30, 0.035, 169)] - [InlineData(SimulationType.Default, 91069, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Queuing, 91000, 0.00, 0.035, 169)] - [InlineData(SimulationType.Queuing, 91010, 0.10, 0.035, 169)] - [InlineData(SimulationType.Queuing, 91020, 0.15, 0.035, 169)] - [InlineData(SimulationType.Queuing, 91030, 0.20, 0.035, 169)] - [InlineData(SimulationType.Queuing, 91040, 0.25, 0.035, 169)] - [InlineData(SimulationType.Queuing, 91050, 0.30, 0.035, 169)] - [InlineData(SimulationType.Queuing, 91060, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Queuing, 92001, 0.00, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92011, 0.10, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92021, 0.15, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92031, 0.20, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92041, 0.25, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92051, 0.30, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92061, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Queuing, 92002, 0.00, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92012, 0.10, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92022, 0.15, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92032, 0.20, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92042, 0.25, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92052, 0.30, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92062, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Queuing, 92003, 0.00, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92013, 0.10, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92023, 0.15, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92033, 0.20, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92043, 0.25, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92053, 0.30, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92063, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Queuing, 92004, 0.00, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92014, 0.10, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92024, 0.15, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92034, 0.20, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92044, 0.25, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92054, 0.30, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92064, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Queuing, 92005, 0.00, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92015, 0.10, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92025, 0.15, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92035, 0.20, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92045, 0.25, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92055, 0.30, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92065, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Queuing, 92006, 0.00, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92016, 0.10, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92026, 0.15, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92036, 0.20, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92046, 0.25, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92056, 0.30, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92066, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Queuing, 92007, 0.00, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92017, 0.10, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92027, 0.15, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92037, 0.20, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92047, 0.25, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92057, 0.30, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92067, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Queuing, 92008, 0.00, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92018, 0.10, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92028, 0.15, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92038, 0.20, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92048, 0.25, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92058, 0.30, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92068, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Queuing, 92009, 0.00, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92019, 0.10, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92029, 0.15, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92039, 0.20, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92049, 0.25, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92059, 0.30, 0.035, 169)] - [InlineData(SimulationType.Queuing, 92069, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Central, 93000, 0.00, 0.035, 169)] - [InlineData(SimulationType.Central, 93010, 0.10, 0.035, 169)] - [InlineData(SimulationType.Central, 93020, 0.15, 0.035, 169)] - [InlineData(SimulationType.Central, 93030, 0.20, 0.035, 169)] - [InlineData(SimulationType.Central, 93040, 0.25, 0.035, 169)] - [InlineData(SimulationType.Central, 93050, 0.30, 0.035, 169)] - [InlineData(SimulationType.Central, 93060, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Central, 93001, 0.00, 0.035, 169)] - [InlineData(SimulationType.Central, 93011, 0.10, 0.035, 169)] - [InlineData(SimulationType.Central, 93021, 0.15, 0.035, 169)] - [InlineData(SimulationType.Central, 93031, 0.20, 0.035, 169)] - [InlineData(SimulationType.Central, 93041, 0.25, 0.035, 169)] - [InlineData(SimulationType.Central, 93051, 0.30, 0.035, 169)] - [InlineData(SimulationType.Central, 93061, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Central, 93002, 0.00, 0.035, 169)] - [InlineData(SimulationType.Central, 93012, 0.10, 0.035, 169)] - [InlineData(SimulationType.Central, 93022, 0.15, 0.035, 169)] - [InlineData(SimulationType.Central, 93032, 0.20, 0.035, 169)] - [InlineData(SimulationType.Central, 93042, 0.25, 0.035, 169)] - [InlineData(SimulationType.Central, 93052, 0.30, 0.035, 169)] - [InlineData(SimulationType.Central, 93062, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Central, 93003, 0.00, 0.035, 169)] - [InlineData(SimulationType.Central, 93013, 0.10, 0.035, 169)] - [InlineData(SimulationType.Central, 93023, 0.15, 0.035, 169)] - [InlineData(SimulationType.Central, 93033, 0.20, 0.035, 169)] - [InlineData(SimulationType.Central, 93043, 0.25, 0.035, 169)] - [InlineData(SimulationType.Central, 93053, 0.30, 0.035, 169)] - [InlineData(SimulationType.Central, 93063, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Central, 93004, 0.00, 0.035, 169)] - [InlineData(SimulationType.Central, 93014, 0.10, 0.035, 169)] - [InlineData(SimulationType.Central, 93024, 0.15, 0.035, 169)] - [InlineData(SimulationType.Central, 93034, 0.20, 0.035, 169)] - [InlineData(SimulationType.Central, 93044, 0.25, 0.035, 169)] - [InlineData(SimulationType.Central, 93054, 0.30, 0.035, 169)] - [InlineData(SimulationType.Central, 93064, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Central, 93005, 0.00, 0.035, 169)] - [InlineData(SimulationType.Central, 93015, 0.10, 0.035, 169)] - [InlineData(SimulationType.Central, 93025, 0.15, 0.035, 169)] - [InlineData(SimulationType.Central, 93035, 0.20, 0.035, 169)] - [InlineData(SimulationType.Central, 93045, 0.25, 0.035, 169)] - [InlineData(SimulationType.Central, 93055, 0.30, 0.035, 169)] - [InlineData(SimulationType.Central, 93065, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Central, 93006, 0.00, 0.035, 169)] - [InlineData(SimulationType.Central, 93016, 0.10, 0.035, 169)] - [InlineData(SimulationType.Central, 93026, 0.15, 0.035, 169)] - [InlineData(SimulationType.Central, 93036, 0.20, 0.035, 169)] - [InlineData(SimulationType.Central, 93046, 0.25, 0.035, 169)] - [InlineData(SimulationType.Central, 93056, 0.30, 0.035, 169)] - [InlineData(SimulationType.Central, 93066, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Central, 93007, 0.00, 0.035, 169)] - [InlineData(SimulationType.Central, 93017, 0.10, 0.035, 169)] - [InlineData(SimulationType.Central, 93027, 0.15, 0.035, 169)] - [InlineData(SimulationType.Central, 93037, 0.20, 0.035, 169)] - [InlineData(SimulationType.Central, 93047, 0.25, 0.035, 169)] - [InlineData(SimulationType.Central, 93057, 0.30, 0.035, 169)] - [InlineData(SimulationType.Central, 93067, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Central, 93008, 0.00, 0.035, 169)] - [InlineData(SimulationType.Central, 93018, 0.10, 0.035, 169)] - [InlineData(SimulationType.Central, 93028, 0.15, 0.035, 169)] - [InlineData(SimulationType.Central, 93038, 0.20, 0.035, 169)] - [InlineData(SimulationType.Central, 93048, 0.25, 0.035, 169)] - [InlineData(SimulationType.Central, 93058, 0.30, 0.035, 169)] - [InlineData(SimulationType.Central, 93068, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Central, 93009, 0.00, 0.035, 169)] - [InlineData(SimulationType.Central, 93019, 0.10, 0.035, 169)] - [InlineData(SimulationType.Central, 93029, 0.15, 0.035, 169)] - [InlineData(SimulationType.Central, 93039, 0.20, 0.035, 169)] - [InlineData(SimulationType.Central, 93049, 0.25, 0.035, 169)] - [InlineData(SimulationType.Central, 93059, 0.30, 0.035, 169)] - [InlineData(SimulationType.Central, 93069, 0.35, 0.035, 169)] - - [InlineData(SimulationType.Default, 10010, 0.20, 0.035, 169, 5, 5, 2, 0.0)] - [InlineData(SimulationType.Default, 10011, 0.20, 0.035, 169, 5, 5, 2, 0.1)] - [InlineData(SimulationType.Default, 10012, 0.20, 0.035, 169, 5, 5, 2, 0.2)] - [InlineData(SimulationType.Default, 10013, 0.20, 0.035, 169, 5, 5, 2, 0.3)] - [InlineData(SimulationType.Default, 10014, 0.20, 0.035, 169, 5, 5, 2, 0.4)] - [InlineData(SimulationType.Default, 10015, 0.20, 0.035, 169, 5, 5, 2, 0.5)] - [InlineData(SimulationType.Default, 10016, 0.20, 0.035, 169, 5, 5, 2, 0.6)] - [InlineData(SimulationType.Default, 10017, 0.20, 0.035, 169, 5, 5, 2, 0.7)] - [InlineData(SimulationType.Default, 10018, 0.20, 0.035, 169, 5, 5, 2, 0.8)] - [InlineData(SimulationType.Default, 10019, 0.20, 0.035, 169, 5, 5, 2, 0.9)] - [InlineData(SimulationType.Default, 10020, 0.20, 0.035, 169, 5, 5, 2, 1)] - - [InlineData(SimulationType.Default, 10110, 0.20, 0.035, 169, 5, 1, 1.41, 0.0)] - [InlineData(SimulationType.Default, 10111, 0.20, 0.035, 169, 5, 1, 1.41, 0.1)] - [InlineData(SimulationType.Default, 10112, 0.20, 0.035, 169, 5, 1, 1.41, 0.2)] - [InlineData(SimulationType.Default, 10113, 0.20, 0.035, 169, 5, 1, 1.41, 0.3)] - [InlineData(SimulationType.Default, 10114, 0.20, 0.035, 169, 5, 1, 1.41, 0.4)] - [InlineData(SimulationType.Default, 10115, 0.20, 0.035, 169, 5, 1, 1.41, 0.5)] - [InlineData(SimulationType.Default, 10116, 0.20, 0.035, 169, 5, 1, 1.41, 0.6)] - [InlineData(SimulationType.Default, 10117, 0.20, 0.035, 169, 5, 1, 1.41, 0.7)] - [InlineData(SimulationType.Default, 10118, 0.20, 0.035, 169, 5, 1, 1.41, 0.8)] - [InlineData(SimulationType.Default, 10119, 0.20, 0.035, 169, 5, 1, 1.41, 0.9)] - [InlineData(SimulationType.Default, 10120, 0.20, 0.035, 169, 5, 1, 1.41, 1)] - - [InlineData(SimulationType.Queuing, 20010, 0.20, 0.035, 169, 5, 5, 2, 0.0)] - [InlineData(SimulationType.Queuing, 20011, 0.20, 0.035, 169, 5, 5, 2, 0.1)] - [InlineData(SimulationType.Queuing, 20012, 0.20, 0.035, 169, 5, 5, 2, 0.2)] - [InlineData(SimulationType.Queuing, 20013, 0.20, 0.035, 169, 5, 5, 2, 0.3)] - [InlineData(SimulationType.Queuing, 20014, 0.20, 0.035, 169, 5, 5, 2, 0.4)] - [InlineData(SimulationType.Queuing, 20015, 0.20, 0.035, 169, 5, 5, 2, 0.5)] - [InlineData(SimulationType.Queuing, 20016, 0.20, 0.035, 169, 5, 5, 2, 0.6)] - [InlineData(SimulationType.Queuing, 20017, 0.20, 0.035, 169, 5, 5, 2, 0.7)] - [InlineData(SimulationType.Queuing, 20018, 0.20, 0.035, 169, 5, 5, 2, 0.8)] - [InlineData(SimulationType.Queuing, 20019, 0.20, 0.035, 169, 5, 5, 2, 0.9)] - [InlineData(SimulationType.Queuing, 20020, 0.20, 0.035, 169, 5, 5, 2, 1)] - - [InlineData(SimulationType.Queuing, 20110, 0.20, 0.035, 169, 5, 1, 1.41, 0.0)] - [InlineData(SimulationType.Queuing, 20111, 0.20, 0.035, 169, 5, 1, 1.41, 0.1)] - [InlineData(SimulationType.Queuing, 20112, 0.20, 0.035, 169, 5, 1, 1.41, 0.2)] - [InlineData(SimulationType.Queuing, 20113, 0.20, 0.035, 169, 5, 1, 1.41, 0.3)] - [InlineData(SimulationType.Queuing, 20114, 0.20, 0.035, 169, 5, 1, 1.41, 0.4)] - [InlineData(SimulationType.Queuing, 20115, 0.20, 0.035, 169, 5, 1, 1.41, 0.5)] - [InlineData(SimulationType.Queuing, 20116, 0.20, 0.035, 169, 5, 1, 1.41, 0.6)] - [InlineData(SimulationType.Queuing, 20117, 0.20, 0.035, 169, 5, 1, 1.41, 0.7)] - [InlineData(SimulationType.Queuing, 20118, 0.20, 0.035, 169, 5, 1, 1.41, 0.8)] - [InlineData(SimulationType.Queuing, 20119, 0.20, 0.035, 169, 5, 1, 1.41, 0.9)] - [InlineData(SimulationType.Queuing, 20120, 0.20, 0.035, 169, 5, 1, 1.41, 1)] - - [InlineData(SimulationType.Central, 30010, 0.20, 0.035, 169, 5, 5, 2, 0.0)] - [InlineData(SimulationType.Central, 30011, 0.20, 0.035, 169, 5, 5, 2, 0.1)] - [InlineData(SimulationType.Central, 30012, 0.20, 0.035, 169, 5, 5, 2, 0.2)] - [InlineData(SimulationType.Central, 30013, 0.20, 0.035, 169, 5, 5, 2, 0.3)] - [InlineData(SimulationType.Central, 30014, 0.20, 0.035, 169, 5, 5, 2, 0.4)] - [InlineData(SimulationType.Central, 30015, 0.20, 0.035, 169, 5, 5, 2, 0.5)] - [InlineData(SimulationType.Central, 30016, 0.20, 0.035, 169, 5, 5, 2, 0.6)] - [InlineData(SimulationType.Central, 30017, 0.20, 0.035, 169, 5, 5, 2, 0.7)] - [InlineData(SimulationType.Central, 30018, 0.20, 0.035, 169, 5, 5, 2, 0.8)] - [InlineData(SimulationType.Central, 30019, 0.20, 0.035, 169, 5, 5, 2, 0.9)] - [InlineData(SimulationType.Central, 30020, 0.20, 0.035, 169, 5, 5, 2, 1)] - - [InlineData(SimulationType.Central, 30110, 0.20, 0.035, 169, 5, 1, 1.41, 0.0)] - [InlineData(SimulationType.Central, 30111, 0.20, 0.035, 169, 5, 1, 1.41, 0.1)] - [InlineData(SimulationType.Central, 30112, 0.20, 0.035, 169, 5, 1, 1.41, 0.2)] - [InlineData(SimulationType.Central, 30113, 0.20, 0.035, 169, 5, 1, 1.41, 0.3)] - [InlineData(SimulationType.Central, 30114, 0.20, 0.035, 169, 5, 1, 1.41, 0.4)] - [InlineData(SimulationType.Central, 30115, 0.20, 0.035, 169, 5, 1, 1.41, 0.5)] - [InlineData(SimulationType.Central, 30116, 0.20, 0.035, 169, 5, 1, 1.41, 0.6)] - [InlineData(SimulationType.Central, 30117, 0.20, 0.035, 169, 5, 1, 1.41, 0.7)] - [InlineData(SimulationType.Central, 30118, 0.20, 0.035, 169, 5, 1, 1.41, 0.8)] - [InlineData(SimulationType.Central, 30119, 0.20, 0.035, 169, 5, 1, 1.41, 0.9)] - [InlineData(SimulationType.Central, 30120, 0.20, 0.035, 169, 5, 1, 1.41, 1)] + [InlineData(SimulationType.Default, 6, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Default, 91000, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Default, 91010, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Default, 91020, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Default, 91030, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Default, 91040, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Default, 91050, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Default, 91060, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Default, 91070, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Default, 91001, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Default, 91011, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Default, 91021, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Default, 91031, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Default, 91041, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Default, 91051, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Default, 91061, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Default, 91071, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Default, 91002, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Default, 91012, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Default, 91022, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Default, 91032, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Default, 91042, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Default, 91052, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Default, 91062, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Default, 91072, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Default, 91003, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Default, 91013, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Default, 91023, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Default, 91033, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Default, 91043, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Default, 91053, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Default, 91063, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Default, 91073, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Default, 91004, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Default, 91014, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Default, 91024, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Default, 91034, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Default, 91044, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Default, 91054, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Default, 91064, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Default, 91074, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Default, 91005, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Default, 91015, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Default, 91025, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Default, 91035, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Default, 91045, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Default, 91055, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Default, 91065, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Default, 91075, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Default, 91006, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Default, 91016, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Default, 91026, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Default, 91036, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Default, 91046, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Default, 91056, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Default, 91066, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Default, 91076, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Default, 91007, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Default, 91017, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Default, 91027, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Default, 91037, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Default, 91047, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Default, 91057, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Default, 91067, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Default, 91077, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Default, 91008, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Default, 91018, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Default, 91028, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Default, 91038, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Default, 91048, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Default, 91058, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Default, 91068, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Default, 91078, 0.05, 0.035, 169)] + // + // + // + //[InlineData(SimulationType.Default, 91009, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Default, 91019, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Default, 91029, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Default, 91039, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Default, 91049, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Default, 91059, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Default, 91069, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Default, 91079, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Queuing, 91000, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 91010, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 91020, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 91030, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 91040, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 91050, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 91060, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 91070, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Queuing, 92001, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92011, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92021, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92031, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92041, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92051, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92061, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 91071, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Queuing, 92002, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92012, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92022, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92032, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92042, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92052, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92062, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 91072, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Queuing, 92003, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92013, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92023, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92033, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92043, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92053, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92063, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 91073, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Queuing, 92004, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92014, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92024, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92034, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92044, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92054, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92064, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 91074, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Queuing, 92005, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92015, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92025, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92035, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92045, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92055, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92065, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 91075, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Queuing, 92006, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92016, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92026, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92036, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92046, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92056, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92066, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 91076, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Queuing, 92007, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92017, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92027, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92037, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92047, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92057, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92067, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 91077, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Queuing, 92008, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92018, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92028, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92038, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92048, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92058, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92068, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 91078, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Queuing, 92009, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92019, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92029, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92039, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92049, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92059, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 92069, 0.35, 0.035, 169)] + //[InlineData(SimulationType.Queuing, 91079, 0.05, 0.035, 169)] + // + //[InlineData(SimulationType.Central, 93000, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Central, 93010, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Central, 93020, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Central, 93030, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Central, 93040, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Central, 93050, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Central, 93060, 0.35, 0.035, 169)] + // + //[InlineData(SimulationType.Central, 93001, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Central, 93011, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Central, 93021, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Central, 93031, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Central, 93041, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Central, 93051, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Central, 93061, 0.35, 0.035, 169)] + // + //[InlineData(SimulationType.Central, 93002, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Central, 93012, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Central, 93022, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Central, 93032, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Central, 93042, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Central, 93052, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Central, 93062, 0.35, 0.035, 169)] + // + //[InlineData(SimulationType.Central, 93003, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Central, 93013, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Central, 93023, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Central, 93033, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Central, 93043, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Central, 93053, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Central, 93063, 0.35, 0.035, 169)] + // + //[InlineData(SimulationType.Central, 93004, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Central, 93014, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Central, 93024, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Central, 93034, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Central, 93044, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Central, 93054, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Central, 93064, 0.35, 0.035, 169)] + // + //[InlineData(SimulationType.Central, 93005, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Central, 93015, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Central, 93025, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Central, 93035, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Central, 93045, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Central, 93055, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Central, 93065, 0.35, 0.035, 169)] + // + //[InlineData(SimulationType.Central, 93006, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Central, 93016, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Central, 93026, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Central, 93036, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Central, 93046, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Central, 93056, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Central, 93066, 0.35, 0.035, 169)] + // + //[InlineData(SimulationType.Central, 93007, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Central, 93017, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Central, 93027, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Central, 93037, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Central, 93047, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Central, 93057, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Central, 93067, 0.35, 0.035, 169)] + // + //[InlineData(SimulationType.Central, 93008, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Central, 93018, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Central, 93028, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Central, 93038, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Central, 93048, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Central, 93058, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Central, 93068, 0.35, 0.035, 169)] + // + //[InlineData(SimulationType.Central, 93009, 0.00, 0.035, 169)] + //[InlineData(SimulationType.Central, 93019, 0.10, 0.035, 169)] + //[InlineData(SimulationType.Central, 93029, 0.15, 0.035, 169)] + //[InlineData(SimulationType.Central, 93039, 0.20, 0.035, 169)] + //[InlineData(SimulationType.Central, 93049, 0.25, 0.035, 169)] + //[InlineData(SimulationType.Central, 93059, 0.30, 0.035, 169)] + //[InlineData(SimulationType.Central, 93069, 0.35, 0.035, 169)] + // + //[InlineData(SimulationType.Default, 10010, 0.20, 0.035, 169, 5, 5, 2, 0.0)] + //[InlineData(SimulationType.Default, 10011, 0.20, 0.035, 169, 5, 5, 2, 0.1)] + //[InlineData(SimulationType.Default, 10012, 0.20, 0.035, 169, 5, 5, 2, 0.2)] + //[InlineData(SimulationType.Default, 10013, 0.20, 0.035, 169, 5, 5, 2, 0.3)] + //[InlineData(SimulationType.Default, 10014, 0.20, 0.035, 169, 5, 5, 2, 0.4)] + //[InlineData(SimulationType.Default, 10015, 0.20, 0.035, 169, 5, 5, 2, 0.5)] + //[InlineData(SimulationType.Default, 10016, 0.20, 0.035, 169, 5, 5, 2, 0.6)] + //[InlineData(SimulationType.Default, 10017, 0.20, 0.035, 169, 5, 5, 2, 0.7)] + //[InlineData(SimulationType.Default, 10018, 0.20, 0.035, 169, 5, 5, 2, 0.8)] + //[InlineData(SimulationType.Default, 10019, 0.20, 0.035, 169, 5, 5, 2, 0.9)] + //[InlineData(SimulationType.Default, 10020, 0.20, 0.035, 169, 5, 5, 2, 1)] + // + //[InlineData(SimulationType.Default, 10110, 0.20, 0.035, 169, 5, 1, 1.41, 0.0)] + //[InlineData(SimulationType.Default, 10111, 0.20, 0.035, 169, 5, 1, 1.41, 0.1)] + //[InlineData(SimulationType.Default, 10112, 0.20, 0.035, 169, 5, 1, 1.41, 0.2)] + //[InlineData(SimulationType.Default, 10113, 0.20, 0.035, 169, 5, 1, 1.41, 0.3)] + //[InlineData(SimulationType.Default, 10114, 0.20, 0.035, 169, 5, 1, 1.41, 0.4)] + //[InlineData(SimulationType.Default, 10115, 0.20, 0.035, 169, 5, 1, 1.41, 0.5)] + //[InlineData(SimulationType.Default, 10116, 0.20, 0.035, 169, 5, 1, 1.41, 0.6)] + //[InlineData(SimulationType.Default, 10117, 0.20, 0.035, 169, 5, 1, 1.41, 0.7)] + //[InlineData(SimulationType.Default, 10118, 0.20, 0.035, 169, 5, 1, 1.41, 0.8)] + //[InlineData(SimulationType.Default, 10119, 0.20, 0.035, 169, 5, 1, 1.41, 0.9)] + //[InlineData(SimulationType.Default, 10120, 0.20, 0.035, 169, 5, 1, 1.41, 1)] + // + //[InlineData(SimulationType.Queuing, 20010, 0.20, 0.035, 169, 5, 5, 2, 0.0)] + //[InlineData(SimulationType.Queuing, 20011, 0.20, 0.035, 169, 5, 5, 2, 0.1)] + //[InlineData(SimulationType.Queuing, 20012, 0.20, 0.035, 169, 5, 5, 2, 0.2)] + //[InlineData(SimulationType.Queuing, 20013, 0.20, 0.035, 169, 5, 5, 2, 0.3)] + //[InlineData(SimulationType.Queuing, 20014, 0.20, 0.035, 169, 5, 5, 2, 0.4)] + //[InlineData(SimulationType.Queuing, 20015, 0.20, 0.035, 169, 5, 5, 2, 0.5)] + //[InlineData(SimulationType.Queuing, 20016, 0.20, 0.035, 169, 5, 5, 2, 0.6)] + //[InlineData(SimulationType.Queuing, 20017, 0.20, 0.035, 169, 5, 5, 2, 0.7)] + //[InlineData(SimulationType.Queuing, 20018, 0.20, 0.035, 169, 5, 5, 2, 0.8)] + //[InlineData(SimulationType.Queuing, 20019, 0.20, 0.035, 169, 5, 5, 2, 0.9)] + //[InlineData(SimulationType.Queuing, 20020, 0.20, 0.035, 169, 5, 5, 2, 1)] + // + //[InlineData(SimulationType.Queuing, 20110, 0.20, 0.035, 169, 5, 1, 1.41, 0.0)] + //[InlineData(SimulationType.Queuing, 20111, 0.20, 0.035, 169, 5, 1, 1.41, 0.1)] + //[InlineData(SimulationType.Queuing, 20112, 0.20, 0.035, 169, 5, 1, 1.41, 0.2)] + //[InlineData(SimulationType.Queuing, 20113, 0.20, 0.035, 169, 5, 1, 1.41, 0.3)] + //[InlineData(SimulationType.Queuing, 20114, 0.20, 0.035, 169, 5, 1, 1.41, 0.4)] + //[InlineData(SimulationType.Queuing, 20115, 0.20, 0.035, 169, 5, 1, 1.41, 0.5)] + //[InlineData(SimulationType.Queuing, 20116, 0.20, 0.035, 169, 5, 1, 1.41, 0.6)] + //[InlineData(SimulationType.Queuing, 20117, 0.20, 0.035, 169, 5, 1, 1.41, 0.7)] + //[InlineData(SimulationType.Queuing, 20118, 0.20, 0.035, 169, 5, 1, 1.41, 0.8)] + //[InlineData(SimulationType.Queuing, 20119, 0.20, 0.035, 169, 5, 1, 1.41, 0.9)] + //[InlineData(SimulationType.Queuing, 20120, 0.20, 0.035, 169, 5, 1, 1.41, 1)] + // + //[InlineData(SimulationType.Central, 30010, 0.20, 0.035, 169, 5, 5, 2, 0.0)] + //[InlineData(SimulationType.Central, 30011, 0.20, 0.035, 169, 5, 5, 2, 0.1)] + //[InlineData(SimulationType.Central, 30012, 0.20, 0.035, 169, 5, 5, 2, 0.2)] + //[InlineData(SimulationType.Central, 30013, 0.20, 0.035, 169, 5, 5, 2, 0.3)] + //[InlineData(SimulationType.Central, 30014, 0.20, 0.035, 169, 5, 5, 2, 0.4)] + //[InlineData(SimulationType.Central, 30015, 0.20, 0.035, 169, 5, 5, 2, 0.5)] + //[InlineData(SimulationType.Central, 30016, 0.20, 0.035, 169, 5, 5, 2, 0.6)] + //[InlineData(SimulationType.Central, 30017, 0.20, 0.035, 169, 5, 5, 2, 0.7)] + //[InlineData(SimulationType.Central, 30018, 0.20, 0.035, 169, 5, 5, 2, 0.8)] + //[InlineData(SimulationType.Central, 30019, 0.20, 0.035, 169, 5, 5, 2, 0.9)] + //[InlineData(SimulationType.Central, 30020, 0.20, 0.035, 169, 5, 5, 2, 1)] + // + //[InlineData(SimulationType.Central, 30110, 0.20, 0.035, 169, 5, 1, 1.41, 0.0)] + //[InlineData(SimulationType.Central, 30111, 0.20, 0.035, 169, 5, 1, 1.41, 0.1)] + //[InlineData(SimulationType.Central, 30112, 0.20, 0.035, 169, 5, 1, 1.41, 0.2)] + //[InlineData(SimulationType.Central, 30113, 0.20, 0.035, 169, 5, 1, 1.41, 0.3)] + //[InlineData(SimulationType.Central, 30114, 0.20, 0.035, 169, 5, 1, 1.41, 0.4)] + //[InlineData(SimulationType.Central, 30115, 0.20, 0.035, 169, 5, 1, 1.41, 0.5)] + //[InlineData(SimulationType.Central, 30116, 0.20, 0.035, 169, 5, 1, 1.41, 0.6)] + //[InlineData(SimulationType.Central, 30117, 0.20, 0.035, 169, 5, 1, 1.41, 0.7)] + //[InlineData(SimulationType.Central, 30118, 0.20, 0.035, 169, 5, 1, 1.41, 0.8)] + //[InlineData(SimulationType.Central, 30119, 0.20, 0.035, 169, 5, 1, 1.41, 0.9)] + //[InlineData(SimulationType.Central, 30120, 0.20, 0.035, 169, 5, 1, 1.41, 1)] public async Task AgentSystemTest(SimulationType simulationType, int simNr, double deviation, double arrivalRateRun, int seed , int seedDataGen = 5, double reuse = 1.3, double complxity = 1.9, double organziationaldegree = 0.7) @@ -620,10 +643,10 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub simConfig.ReplaceOption(new EstimatedThroughPut(value: throughput)); simConfig.ReplaceOption(new TimePeriodForThroughputCalculation(value: 4000)); simConfig.ReplaceOption(new Production.Core.Environment.Options.Seed(value: seed)); - simConfig.ReplaceOption(new SettlingStart(value: 2880)); + simConfig.ReplaceOption(new SettlingStart(value: 1440)); simConfig.ReplaceOption(new MinDeliveryTime(value: 10)); simConfig.ReplaceOption(new MaxDeliveryTime(value: 15)); - simConfig.ReplaceOption(new SimulationEnd(value: 10080 * 3)); + simConfig.ReplaceOption(new SimulationEnd(value: 1440 * 2)); simConfig.ReplaceOption(new SaveToDB(value: true)); simConfig.ReplaceOption(new DebugSystem(value: true)); simConfig.ReplaceOption(new DebugAgents(value: true)); From 181995ae7c8fe5c97a20a909676a9917700b6889 Mon Sep 17 00:00:00 2001 From: Martin Krockert Date: Fri, 4 Aug 2023 12:47:42 +0200 Subject: [PATCH 13/16] - Central Worker FIx. --- .../Data/DynamicInitializer/Tables/MasterTableResource.cs | 4 ++-- Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs | 2 +- Mate.Test/SimulationEnvironment/AgentSystem.cs | 6 +++--- Mate.Test/SimulationEnvironment/CentralSystem.cs | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Mate.DataCore/Data/DynamicInitializer/Tables/MasterTableResource.cs b/Mate.DataCore/Data/DynamicInitializer/Tables/MasterTableResource.cs index 680f9654..60f827ba 100644 --- a/Mate.DataCore/Data/DynamicInitializer/Tables/MasterTableResource.cs +++ b/Mate.DataCore/Data/DynamicInitializer/Tables/MasterTableResource.cs @@ -63,12 +63,12 @@ private void CreateTools(M_ResourceCapability capability, long setupTime, int nu for (int i = 1; i < 1 + numberOfOperators; i++) { - operators.Add(CreateNewResource(capability.Name + " Operator " + i, true, true, capability.Name)); + operators.Add(CreateNewResource(capability.Name + " Operator " + i, true, true, capability.Name + "O")); } for (int i = 1; i < 1 + numberOfWorker; i++) { - workers.Add(CreateNewResource(capability.Name + " Worker " + i, true, true, capability.Name)); + workers.Add(CreateNewResource(capability.Name + " Worker " + i, true, true, capability.Name + "W")); } var numberOfTools = _capability.Capabilities diff --git a/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs b/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs index 6dc85b7f..969eb6da 100644 --- a/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs +++ b/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs @@ -115,7 +115,7 @@ private void LoadProductionOrders(IActorRef inboxActorRef) CreateComputationalTime("TimeWriteConfirmations", lastStep); System.Diagnostics.Debug.WriteLine("Start GanttPlan"); - GanttPlanOptRunner.RunOptAndExport("Continuous", "D:\\Work\\GANTTPLAN\\GanttPlanOptRunner.exe"); //changed to Init - merged configs + GanttPlanOptRunner.RunOptAndExport("Continuous", "C:\\tools\\Ganttplan\\GanttPlanOptRunner.exe"); //changed to Init - merged configs System.Diagnostics.Debug.WriteLine("Finish GanttPlan"); lastStep = stopwatch.ElapsedMilliseconds - lastStep; diff --git a/Mate.Test/SimulationEnvironment/AgentSystem.cs b/Mate.Test/SimulationEnvironment/AgentSystem.cs index 4a33f17f..a0170145 100644 --- a/Mate.Test/SimulationEnvironment/AgentSystem.cs +++ b/Mate.Test/SimulationEnvironment/AgentSystem.cs @@ -249,7 +249,7 @@ public static IEnumerable GetTestData() [Theory] // [x] [InlineData(SimulationType.Default, 110, 0.00, 0.035, 1337)] // throughput dynamic ruled - [InlineData(SimulationType.Default, 6, 0.20, 0.035, 169)] + [InlineData(SimulationType.Central, 6, 0.20, 0.035, 169)] //[InlineData(SimulationType.Default, 91000, 0.00, 0.035, 169)] //[InlineData(SimulationType.Default, 91010, 0.10, 0.035, 169)] //[InlineData(SimulationType.Default, 91020, 0.15, 0.035, 169)] @@ -646,7 +646,7 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub simConfig.ReplaceOption(new SettlingStart(value: 1440)); simConfig.ReplaceOption(new MinDeliveryTime(value: 10)); simConfig.ReplaceOption(new MaxDeliveryTime(value: 15)); - simConfig.ReplaceOption(new SimulationEnd(value: 1440 * 2)); + simConfig.ReplaceOption(new SimulationEnd(value: 10080 * 3)); simConfig.ReplaceOption(new SaveToDB(value: true)); simConfig.ReplaceOption(new DebugSystem(value: true)); simConfig.ReplaceOption(new DebugAgents(value: true)); @@ -666,7 +666,7 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub ganttPlanContext.DbContext.Database.ExecuteSqlRaw("EXEC sp_MSforeachtable 'DELETE FROM ? '"); //Synchronisation GanttPlan - GanttPlanOptRunner.RunOptAndExport("Init", "D:\\Work\\GANTTPLAN\\GanttPlanOptRunner.exe"); + GanttPlanOptRunner.RunOptAndExport("Init", "C:\\tools\\Ganttplan\\GanttPlanOptRunner.exe"); simContext = new GanttSimulation(dbName: TestMateDb, messageHub: new ConsoleHub()); } diff --git a/Mate.Test/SimulationEnvironment/CentralSystem.cs b/Mate.Test/SimulationEnvironment/CentralSystem.cs index fe540efc..9e8cf1a3 100644 --- a/Mate.Test/SimulationEnvironment/CentralSystem.cs +++ b/Mate.Test/SimulationEnvironment/CentralSystem.cs @@ -108,7 +108,7 @@ public async Task CentralSystemTest() ganttPlanContext.DbContext.Database.ExecuteSqlRaw("EXEC sp_MSforeachtable 'DELETE FROM ? '"); //Synchronisation GanttPlan - GanttPlanOptRunner.RunOptAndExport("Init", "D:\\Work\\GANTTPLAN\\GanttPlanOptRunner.exe"); + GanttPlanOptRunner.RunOptAndExport("Init", "C:\\tools\\Ganttplan\\GanttPlanOptRunner.exe"); var simContext = new GanttSimulation(dbName: TestMateDb, messageHub: new ConsoleHub()); var simConfig = ArgumentConverter.ConfigurationConverter(masterPlanResultContext, 1); From 0936f827fc2b142808622a460371ef3a00f688bd Mon Sep 17 00:00:00 2001 From: Martin Krockert Date: Fri, 4 Aug 2023 13:15:31 +0200 Subject: [PATCH 14/16] BugFix - Kreditors for bought Materials. --- .../SimulationEnvironment/AgentSystem.cs | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/Mate.Test/SimulationEnvironment/AgentSystem.cs b/Mate.Test/SimulationEnvironment/AgentSystem.cs index 4a33f17f..c51c28ee 100644 --- a/Mate.Test/SimulationEnvironment/AgentSystem.cs +++ b/Mate.Test/SimulationEnvironment/AgentSystem.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Security.Cryptography; using System.Threading.Tasks; using Akka.TestKit.Xunit; using AkkaSim.Logging; @@ -10,7 +9,6 @@ using Mate.DataCore.Data.Helper; using Mate.DataCore.Data.Helper.Types; using Mate.DataCore.Data.Initializer; -using Mate.DataCore.Data.WrappersForPrimitives; using Mate.DataCore.DataModel; using Mate.DataCore.GanttPlan; using Mate.DataCore.Nominal; @@ -249,7 +247,8 @@ public static IEnumerable GetTestData() [Theory] // [x] [InlineData(SimulationType.Default, 110, 0.00, 0.035, 1337)] // throughput dynamic ruled - [InlineData(SimulationType.Default, 6, 0.20, 0.035, 169)] + [InlineData(SimulationType.Default, 2000, 0.20, 0.03, 169)] + [InlineData(SimulationType.Queuing, 9, 0.20, 0.03, 169)] //[InlineData(SimulationType.Default, 91000, 0.00, 0.035, 169)] //[InlineData(SimulationType.Default, 91010, 0.10, 0.035, 169)] //[InlineData(SimulationType.Default, 91020, 0.15, 0.035, 169)] @@ -615,23 +614,13 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub SeedInitializer seedInitializer = new SeedInitializer(); seedInitializer.GenerateTestData(TestMateDb, machineCount: 4, toolCount: 6 + // , number of Worker + // , number of Products , seed: seedDataGen , reuseRatio: reuse , complexityRatio: complxity , organizationalDegree: organziationaldegree); - //dbMaster.DbContext.Database.EnsureDeleted(); - //dbMaster.DbContext.Database.EnsureCreated(); - //MasterDBInitializerTruck.DbInitialize(context: dbMaster.DbContext - // , resourceModelSize: resourceModelSize - // , setupModelSize: setupModelSize - // , operatorsModelSize: ModelSize.Small - // , numberOfWorkersForProcessing: 3 - // , secondResource: false - // , createMeasurements: createMeasurements - // , distributeSetupsExponentially: distributeSetupsExponentially); - //InMemoryContext.LoadData(source: _masterDBContext, target: _ctx); - var simConfig = Production.CLI.ArgumentConverter.ConfigurationConverter(dbResult.DbContext, 1); // update customized Items simConfig.AddOption(new ResultsDbConnectionString(dbResult.ConnectionString.Value)); @@ -643,10 +632,10 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub simConfig.ReplaceOption(new EstimatedThroughPut(value: throughput)); simConfig.ReplaceOption(new TimePeriodForThroughputCalculation(value: 4000)); simConfig.ReplaceOption(new Production.Core.Environment.Options.Seed(value: seed)); - simConfig.ReplaceOption(new SettlingStart(value: 1440)); + simConfig.ReplaceOption(new SettlingStart(value: 2880)); simConfig.ReplaceOption(new MinDeliveryTime(value: 10)); simConfig.ReplaceOption(new MaxDeliveryTime(value: 15)); - simConfig.ReplaceOption(new SimulationEnd(value: 1440 * 2)); + simConfig.ReplaceOption(new SimulationEnd(value: 10080 * 3)); simConfig.ReplaceOption(new SaveToDB(value: true)); simConfig.ReplaceOption(new DebugSystem(value: true)); simConfig.ReplaceOption(new DebugAgents(value: true)); From a519c14d1a667ccaccb85f02551b38c5bff62f52 Mon Sep 17 00:00:00 2001 From: MarvinMat <38523923+MarvinMat@users.noreply.github.com> Date: Fri, 4 Aug 2023 14:42:07 +0200 Subject: [PATCH 15/16] Add Quantity to Production order (#132) * - include Quantity > 1 for customer order - extend SimulationOrder with Quantity * - fix business_partner in model creation - split logging into ConsoleHub and LoggingHub to make debugging faster and simulate longer - move SEEDInitializer to DataCore to use it in CLI * add CTE for ComplexityCalculation fix ConsoleHub msg fix error of concurrent access to provider list by making a copy * fix issues of concurrent access to provider list * add the option "Quantity" * add option for simconfig in GANTTPLANOptRunner implement and test quantity > 1 for central --- .../StoredProcedures/ArticleStatistics.cs | 74 +++- .../Data/Seed/MaterialTransformer.cs | 15 +- Mate.DataCore/Data/Seed/SEEDInitializer.cs | 124 ++++++ Mate.DataCore/DataModel/T_CustomerOrder.cs | 2 +- .../ReportingModel/SimulationOrder.cs | 1 + Mate.Production.CLI/Command.cs | 2 + Mate.Production.CLI/ConsoleHub.cs | 20 +- Mate.Production.CLI/LoggingHub.cs | 55 +++ Mate.Production.CLI/Program.cs | 2 +- .../Collector.Analytics.Contracts.cs | 3 +- .../CollectorAgent/Types/StabilityManager.cs | 15 +- .../DirectoryAgent/Behaviour/Central.cs | 1 + .../Agents/HubAgent/Behaviour/Central.cs | 18 +- .../Agents/HubAgent/Behaviour/Factory.cs | 4 +- .../Agents/HubAgent/Hub.Agent.cs | 8 +- .../ProductionAgent/Behaviour/Default.cs | 4 +- .../Types/DispoArticleDictionary.cs | 12 +- .../ProductionAgent/Types/OperationManager.cs | 6 +- .../Agents/StorageAgent/Behaviour/Default.cs | 3 +- .../Options/GANTTPLANOptRunnerPath.cs | 20 + .../Environment/Options/MaxQuantity.cs | 20 + .../Environment/Options/MinQuantity.cs | 20 + Mate.Production.Core/GanttSimulation.cs | 1 + .../DistributionProvider/OrderGenerator.cs | 18 +- .../FCentralResourceHubInformations.fs | 1 + .../Online/Integration/ProductionTest.cs | 2 +- .../SimulationEnvironment/AgentSystem.cs | 382 ++---------------- .../BenchmarkBucketSize.cs | 2 +- .../BenchmarksOrderArrival.cs | 2 +- .../SimulationEnvironment/CentralSystem.cs | 4 +- .../SimulationEnvironment/SEEDInitializer.cs | 13 +- Mate/Controllers/AgentLiveController.cs | 2 + 32 files changed, 446 insertions(+), 410 deletions(-) create mode 100644 Mate.DataCore/Data/Seed/SEEDInitializer.cs create mode 100644 Mate.Production.CLI/LoggingHub.cs create mode 100644 Mate.Production.Core/Environment/Options/GANTTPLANOptRunnerPath.cs create mode 100644 Mate.Production.Core/Environment/Options/MaxQuantity.cs create mode 100644 Mate.Production.Core/Environment/Options/MinQuantity.cs diff --git a/Mate.DataCore/Data/Initializer/StoredProcedures/ArticleStatistics.cs b/Mate.DataCore/Data/Initializer/StoredProcedures/ArticleStatistics.cs index e5ca5e4d..89ab9912 100644 --- a/Mate.DataCore/Data/Initializer/StoredProcedures/ArticleStatistics.cs +++ b/Mate.DataCore/Data/Initializer/StoredProcedures/ArticleStatistics.cs @@ -1,5 +1,7 @@ using Mate.DataCore.Data.Context; using Microsoft.EntityFrameworkCore; +using System.CodeDom; +using System.Collections.Generic; namespace Mate.DataCore.Data.Initializer.StoredProcedures { @@ -7,8 +9,9 @@ public static class ArticleStatistics { public static void CreateProcedures(MateDb ctx) { + List ctes = new List(); - string sql = string.Format( + string sqlArticleCTE = string.Format( @"CREATE OR ALTER PROCEDURE ArticleCTE @ArticleId int AS @@ -47,13 +50,70 @@ UNION ALL select Sum(u.dur) as SumDuration , sum(u.count) as SumOperations, sum(u.Po) as ProductionOrders from #Union u END"); + ctes.Add(sqlArticleCTE); + + string sqlArticleCapabilityComplexityCTE = string.Format( + @"CREATE OR ALTER PROCEDURE [dbo].[ArticleCapabilityComplexity] + @ArticleId int + AS + BEGIN + SET NOCOUNT ON; + DROP TABLE IF EXISTS dbo.#Temp; + DROP TABLE IF EXISTS dbo.#Union; + WITH Parts(AssemblyID, ComponentID, PerAssemblyQty, ComponentLevel, ResourceCapabilityId) AS + ( + SELECT b.ArticleParentId, b.ArticleChildId, CAST(b.Quantity AS decimal),0 AS ComponentLevel, 0 as ResourceCapabilityId + FROM dbo.M_ArticleBom AS b + join dbo.M_Article a on a.Id = b.ArticleParentId + where @ArticleId = a.Id + UNION ALL + SELECT bom.ArticleParentId, bom.ArticleChildId, CAST(PerAssemblyQty * bom.Quantity as DECIMAL), ComponentLevel + 1, 0 as ResourceCapabilityId + FROM dbo.M_ArticleBom AS bom + INNER join dbo.M_Article ac on ac.Id = bom.ArticleParentId + INNER JOIN Parts AS p ON bom.ArticleParentId = p.ComponentID + ) + select * into #Temp + from ( + select pr.Id,pr.Name, Sum(p.PerAssemblyQty) as qty, pr.ToBuild as ToBuild, p.ResourceCapabilityId as ResourceCapabilityId + FROM Parts AS p INNER JOIN M_Article AS pr ON p.ComponentID = pr.Id + Group By pr.Id, pr.Name, p.ComponentID, pr.ToBuild, p.ResourceCapabilityId) as x + + select * into #Union from ( + select Sum(o.Duration * t.qty) as dur, sum(t.qty) as count ,0 as 'Po', o.ResourceCapabilityId as ResourceCapabilityId + from dbo.M_Operation o join #Temp t on t.Id = o.ArticleId + FULL OUTER join M_ResourceCapability allCaps on allCaps.Id = o.ResourceCapabilityId + where o.ArticleId in (select t.Id from #Temp t) + group by o.ResourceCapabilityId + UNION ALL + SELECT SUM(ot.Duration) as dur, COUNT(*) as count , 0 as 'Po', ot.ResourceCapabilityId as ResourceCapabilityId + from dbo.M_Operation ot + FULL OUTER join M_ResourceCapability allCaps on allCaps.Id = ot.ResourceCapabilityId + where ot.ArticleId = @ArticleId + group by ot.ResourceCapabilityId + ) as x + UNION ALL + SELECT 0 as dur, 0 as count, sum(t.qty) + 1 as 'Po', t.ResourceCapabilityId as ResourceCapabilityId + from #Temp t + FULL OUTER join M_ResourceCapability allCaps on allCaps.Id = t.ResourceCapabilityId + where t.ToBuild = 1 + group by t.ResourceCapabilityId + select Sum(u.dur) as SumDuration , sum(u.count) as SumOperations, sum(u.Po) as ProductionOrders, allCaps.Id as ResourceCapabilityId from #Union u + FULL OUTER join M_ResourceCapability allCaps on allCaps.Id = u.ResourceCapabilityId + group by allCaps.Id + END"); + + ctes.Add(sqlArticleCapabilityComplexityCTE); + using (var command = ctx.Database.GetDbConnection().CreateCommand()) { - command.CommandText = sql; - ctx.Database.OpenConnection(); - command.ExecuteNonQuery(); - } + foreach(var cte in ctes) + { + command.CommandText = cte; + ctx.Database.OpenConnection(); + command.ExecuteNonQuery(); + } + } } public static long DeliveryDateEstimator(int articleId, double factor, MateDb dBContext) @@ -69,10 +129,10 @@ public static long DeliveryDateEstimator(int articleId, double factor, MateDb dB { while (reader.Read()) { - System.Diagnostics.Debug.WriteLine(string.Format("Summe der Dauer {0}; Summe der Operationen {1}; Summe der Prodktionsaufträge {2}", reader[0], reader[1], reader[2])); + System.Diagnostics.Debug.WriteLine(string.Format("Summe der Dauer {0}; Anzahl der Operationen {1}; Summe der Produktionsaufträge {2}", reader[0], reader[1], int.Parse(reader[2].ToString()) + 1)); // TODO Catch false informations estimatedProductDelivery = (long)(System.Convert.ToInt64(reader[0]) * factor); - System.Diagnostics.Debug.WriteLine("Estimated Product Delivery{0}", estimatedProductDelivery); + System.Diagnostics.Debug.WriteLine("Estimated Product Delivery {0}", estimatedProductDelivery); } } diff --git a/Mate.DataCore/Data/Seed/MaterialTransformer.cs b/Mate.DataCore/Data/Seed/MaterialTransformer.cs index cc9abce4..7497757f 100644 --- a/Mate.DataCore/Data/Seed/MaterialTransformer.cs +++ b/Mate.DataCore/Data/Seed/MaterialTransformer.cs @@ -6,6 +6,7 @@ using Seed.Generator.Material; using System; using System.Collections.Generic; +using System.Data.HashFunction.xxHash; using System.Linq; namespace Mate.DataCore.Data.Seed @@ -80,7 +81,7 @@ public static void Transform(MateDb mateDb, Materials materials, DynamicInitiali mateDb.ArticleBoms.AddRange(boms); mateDb.SaveChanges(); - CreateStocks(mateDb, businessPartners.First()); ; + CreateStocks(mateDb, businessPartners.ToList()); } @@ -148,7 +149,7 @@ private static M_ArticleBom CreateBOM(M_Article articleFrom, M_Article articlesT } - private static void CreateStocks(MateDb mateDb, M_BusinessPartner businessPartners) + private static void CreateStocks(MateDb mateDb, List businessPartners) { // get the name -> id mappings var dbArticles = mateDb.Articles.ToList(); @@ -163,15 +164,15 @@ private static void CreateStocks(MateDb mateDb, M_BusinessPartner businessPartne { ArticleForeignKey = article.Id, Name = "Stock: " + article.Name, - Min = article.ToPurchase ? 5000 : 0, - Max = 10000, - Current = article.ToPurchase ? 10000 : 0, - StartValue = article.ToPurchase ? 10000 : 0, + Min = article.ToPurchase ? 100 : 0, + Max = 1000, + Current = article.ToPurchase ? 1000 : 0, + StartValue = article.ToPurchase ? 1000 : 0, }); articleToBusinessPartners.Add( new M_ArticleToBusinessPartner { - BusinessPartnerId = businessPartners.Id, + BusinessPartnerId = article.ToPurchase ? businessPartners.Single(x => x.Kreditor).Id : businessPartners.Single(x => x.Debitor).Id, ArticleId = article.Id, PackSize = 5000, Price = 5000 * article.Price, diff --git a/Mate.DataCore/Data/Seed/SEEDInitializer.cs b/Mate.DataCore/Data/Seed/SEEDInitializer.cs new file mode 100644 index 00000000..9d22dc9e --- /dev/null +++ b/Mate.DataCore/Data/Seed/SEEDInitializer.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using Seed; +using Seed.Parameter; +using Seed.Parameter.TransitionMatrix; +using Seed.Parameter.Operation; +using Seed.Generator.Material; +using Seed.Distributions; +using Seed.Generator.Operation; +using Mate.DataCore.Data.Context; +using System.Linq; + +namespace Mate.DataCore.Data.Seed +{ + public class SeedInitializer + { + public void GenerateTestData(string mateDbName, int machineCount, int toolCount + , int seed, double reuseRatio, double complexityRatio, double organizationalDegree + , int numberOfSalesMaterials, int verticalIntegration, int lambda = 2) + { + + //Generate Config + var seedConfig = new Configuration(); + var materialConfig = new MaterialConfig() + { + StructureParameter = new StructureParameter() { + ComplexityRatio = complexityRatio, // 1.9, + ReuseRatio = reuseRatio, // 1.3, + NumberOfSalesMaterials = numberOfSalesMaterials, + VerticalIntegration = verticalIntegration, + Seed = seed // 7 + }, + TransitionMatrixParameter = new TransitionMatrixParameter() { + Lambda = lambda, + OrganizationalDegree = organizationalDegree // 0.7 + } + }; + + seedConfig.WithOption(materialConfig); + + + + var rsSaw = new ResourceGroup("Saw") + .WithResourceuQuantity(machineCount) + .WithTools(GenerateTools(toolCount)); + + var rsDrill = new ResourceGroup("Drill") + .WithResourceuQuantity(machineCount) + .WithTools(GenerateTools(toolCount)); + + var rsAssembly = new ResourceGroup("Assembly") + .WithResourceuQuantity(machineCount) + .WithTools(GenerateTools(toolCount)); + + var rsQuality = new ResourceGroup("Quality") + .WithResourceuQuantity(machineCount) + .WithTools(GenerateTools(toolCount)); + + var resourceConfig = new ResourceConfig().WithResourceGroup(new List { rsSaw, rsDrill, rsAssembly, rsQuality }) + .WithDefaultOperationsDurationMean(TimeSpan.FromMinutes(10)) + .WithDefaultOperationsDurationVariance(0.20) + .WithDefaultSetupDurationMean(TimeSpan.FromMinutes(30)) + .WithDefaultOperationsAmountMean(8) + .WithDefaultOperationsAmountVariance(0.20); + + seedConfig.WithOption(resourceConfig); + + // Generator + var materials = MaterialGenerator.WithConfiguration(materialConfig) + .Generate(); + + var randomizer = new RandomizerBase(materialConfig.StructureParameter.Seed); + var randomizerCollection = RandomizerCollection.WithTransition(randomizer) + .WithOperationDuration(new RandomizerLogNormal(randomizer.Next(int.MaxValue))) + .WithOperationAmount(new RandomizerBinominial(randomizer.Next(int.MaxValue))) + .Build(); + + + var transitionMatrix = TransitionMatrixGenerator.WithConfiguration(seedConfig).Generate(); + + var operationDistributor = OperationDistributor.WithTransitionMatrix(transitionMatrix) + .WithRandomizerCollection(randomizerCollection) + .WithResourceConfig(resourceConfig) + .Build(); + + var operationGenerator = OperationGenerator.WithOperationDistributor(operationDistributor) + .WithMaterials(materials.NodesInUse.Where(x => x.IncomingEdgeIds.Any()).ToArray()) + .Generate(); + + + //Initilize DB + + MateDb mateDb = Dbms.GetMateDataBase(dbName: mateDbName).DbContext; + mateDb.Database.EnsureDeleted(); + mateDb.Database.EnsureCreated(); + + var masterTableCapabilities = CapbilityTransformer.Transform(mateDb, resourceConfig); + + MaterialTransformer.Transform(mateDb, materials, masterTableCapabilities); + + } + + + private List GenerateTools(int amount) + { + var listOfTools = new List(); + var counter = 2; + + + for (int i = 0; i < amount; i++) + { + + var nameOfTool = "Blade" + counter.ToString() + "mm"; + listOfTools.Add(new ResourceTool(nameOfTool)); + counter += 2; + } + + + return listOfTools; + + } + } + +} diff --git a/Mate.DataCore/DataModel/T_CustomerOrder.cs b/Mate.DataCore/DataModel/T_CustomerOrder.cs index 1597a53a..54011a86 100644 --- a/Mate.DataCore/DataModel/T_CustomerOrder.cs +++ b/Mate.DataCore/DataModel/T_CustomerOrder.cs @@ -19,7 +19,7 @@ public class T_CustomerOrder : BaseEntity, IOrder [JsonIgnore] public virtual ICollection CustomerOrderParts { get; set; } public State State { get; set; } - + public override string ToString() { return $"{Id}: {Name}; {DueTime}"; diff --git a/Mate.DataCore/ReportingModel/SimulationOrder.cs b/Mate.DataCore/ReportingModel/SimulationOrder.cs index c9091d75..318a8341 100644 --- a/Mate.DataCore/ReportingModel/SimulationOrder.cs +++ b/Mate.DataCore/ReportingModel/SimulationOrder.cs @@ -7,6 +7,7 @@ namespace Mate.DataCore.ReportingModel public class SimulationOrder : ResultBaseEntity, IOrder { public string Name { get; set; } + public int Quantity { get; set; } public int OriginId { get; set; } public int DueTime { get; set; } public int CreationTime { get; set; } diff --git a/Mate.Production.CLI/Command.cs b/Mate.Production.CLI/Command.cs index 51bde8a3..7d593f64 100644 --- a/Mate.Production.CLI/Command.cs +++ b/Mate.Production.CLI/Command.cs @@ -28,6 +28,8 @@ public class Commands : List , new TimePeriodForThroughputCalculation() , new MaxBucketSize() , new TransitionFactor() + , new MinQuantity() + , new MaxQuantity() , new MaxDeliveryTime() , new MinDeliveryTime() , new TimeConstraintQueueLength() diff --git a/Mate.Production.CLI/ConsoleHub.cs b/Mate.Production.CLI/ConsoleHub.cs index aee698ec..6c48a597 100644 --- a/Mate.Production.CLI/ConsoleHub.cs +++ b/Mate.Production.CLI/ConsoleHub.cs @@ -1,7 +1,10 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using AkkaSim.Logging; +using JetBrains.Annotations; using Mate.Production.Core.SignalR; using Mate.Production.Core.SignalR.Messages; +using Mate.Production.Core.Types; using Newtonsoft.Json; using NLog; @@ -13,15 +16,22 @@ public class ConsoleHub: IMessageHub public List Logs= new List(); + public Action _streamWriter ; + + public ConsoleHub(Action streamWriter) + { + _streamWriter = streamWriter; + } + public void SendToAllClients(string msg, MessageType msgType) { - _logger.Log(LogLevel.Info, msgType.ToString() + ": " + msg); + _logger.Log(LogLevel.Info, msgType.ToString() + ": " + msg); //Console.WriteLine(msg); } public void SendToClient(string listener, string msg, MessageType msgType) { - _logger.Log(LogLevel.Info, $" {listener}: { msg } "); + _streamWriter(listener, msg); } public string ReturnMsgBox(string msg, MessageType type) @@ -35,9 +45,9 @@ public void StartSimulation(string simId, string simNumber) _logger.Log(LogLevel.Info, "Start Simulation (id:" + simId + " | simNumber:" + simNumber + ")"); } - public void ProcessingUpdate(int simId, int finished, string simType, int max) + public void ProcessingUpdate(int finished, int finishedPercent, string progress, int total) { - _logger.Log(LogLevel.Info, $"msg"); + _logger.Log(LogLevel.Info, $"Finished: " + finished +" ("+ finishedPercent + "%) from total " + total + " | "+ progress); } public void GuardianState(object msg) diff --git a/Mate.Production.CLI/LoggingHub.cs b/Mate.Production.CLI/LoggingHub.cs new file mode 100644 index 00000000..c24d417c --- /dev/null +++ b/Mate.Production.CLI/LoggingHub.cs @@ -0,0 +1,55 @@ +using System.Collections.Generic; +using AkkaSim.Logging; +using Mate.Production.Core.SignalR; +using Mate.Production.Core.SignalR.Messages; +using Newtonsoft.Json; +using NLog; + +namespace Mate.Production.CLI +{ + public class LoggingHub: IMessageHub + { + Logger _logger = LogManager.GetLogger(TargetNames.LOG_AGENTS); + + public List Logs= new List(); + + public void SendToAllClients(string msg, MessageType msgType) + { + _logger.Log(LogLevel.Info, msgType.ToString() + ": " + msg); + //Console.WriteLine(msg); + } + + public void SendToClient(string listener, string msg, MessageType msgType) + { + _logger.Log(LogLevel.Info, $" {listener}: { msg } "); + } + + public string ReturnMsgBox(string msg, MessageType type) + { + //Console.WriteLine(value: msg); + return msg; + } + + public void StartSimulation(string simId, string simNumber) + { + _logger.Log(LogLevel.Info, "Start Simulation (id:" + simId + " | simNumber:" + simNumber + ")"); + } + + public void ProcessingUpdate(int simId, int finished, string simType, int max) + { + _logger.Log(LogLevel.Info, $"msg"); + } + + public void GuardianState(object msg) + { + Logs.Add(JsonConvert.SerializeObject(msg)); + } + + public void EndSimulation(string msg, string simId, string simNumber) + { + _logger.Log(LogLevel.Info, $"Simulation Id: { simId } | No. { simNumber } Finished."); + } + + } + +} \ No newline at end of file diff --git a/Mate.Production.CLI/Program.cs b/Mate.Production.CLI/Program.cs index 41f4bb35..c47d78b3 100644 --- a/Mate.Production.CLI/Program.cs +++ b/Mate.Production.CLI/Program.cs @@ -96,7 +96,7 @@ private static async Task RunSimulationTask(string dbName try { Console.WriteLine(value: "Starting AkkaSim."); - var agentCore = new AgentCore(dbName, messageHub: new ConsoleHub()); + var agentCore = new AgentCore(dbName, messageHub: new LoggingHub()); await agentCore.RunAkkaSimulation(configuration: config); } diff --git a/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Contracts.cs b/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Contracts.cs index 36a34881..2558ae18 100644 --- a/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Contracts.cs +++ b/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Contracts.cs @@ -203,8 +203,9 @@ private void AddOrder(Contract.Instruction.StartOrder m) { var op = m.GetObjectFromMessage; var order = new SimulationOrder() { CreationTime = op.CustomerOrder.CreationTime - ,DueTime = op.CustomerOrder.DueTime + , DueTime = op.CustomerOrder.DueTime , State = State.Created + , Quantity = op.CustomerOrder.CustomerOrderParts.ToArray()[0].Quantity , BusinessPartnerId = op.CustomerOrder.BusinessPartnerId , Name = op.CustomerOrder.Name , OriginId = op.CustomerOrder.Id diff --git a/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs b/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs index bd9ddc22..82c96255 100644 --- a/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs +++ b/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs @@ -45,14 +45,14 @@ public void AddEntryForOperation(long time, string operationKey, int position, s public void WriteFile(int simNum) { - string fileName = $"F:\\Work\\Data\\OperationDictionary{simNum}.json"; + string fileName = $"D:\\Work\\Data\\OperationDictionary{simNum}.json"; string jsonString = JsonSerializer.Serialize(OperationDictionary); File.WriteAllText(fileName, jsonString); } public void ReadFile() { - string fileName = "F:\\Work\\Data\\OperationDictionary.json"; + string fileName = "D:\\Work\\Data\\OperationDictionary.json"; string jsonString = File.ReadAllText(fileName); OperationDictionary = JsonSerializer.Deserialize>>(jsonString)!; @@ -110,12 +110,13 @@ public List DoSomeStatistics(int simNum=1, SimulationType simType = Simulat } } - + var average = averageList.Count != 0 ? averageList.Average() : 0.0; + var ratio = counter > 0 && result > 0 ? Math.Round(((double)counter / (double)result) * 100, 2) : 0; - keyValuePairs.Add(CreateKpi("RatioUselessReplan", Math.Round(((double)counter / (double)result) * 100, 2), simNum, simType)); - keyValuePairs.Add(CreateKpi("AverageTimeSpan", averageList.Average(), simNum, simType)); - System.Diagnostics.Debug.WriteLine($"{counter} entries of {result}: {Math.Round(((double)counter/(double)result)*100,2)}%"); - System.Diagnostics.Debug.WriteLine($"Average timespan change {averageList.Average()}"); + keyValuePairs.Add(CreateKpi("RatioUselessReplan", ratio, simNum, simType)); + keyValuePairs.Add(CreateKpi("AverageTimeSpan", average, simNum, simType)); + System.Diagnostics.Debug.WriteLine($"{counter} entries of {result}: {ratio}%"); + System.Diagnostics.Debug.WriteLine($"Average timespan change {average}"); foreach (var positon in averagePosition.OrderBy(x => x.Key)) { diff --git a/Mate.Production.Core/Agents/DirectoryAgent/Behaviour/Central.cs b/Mate.Production.Core/Agents/DirectoryAgent/Behaviour/Central.cs index 656d58ee..fd0b060f 100644 --- a/Mate.Production.Core/Agents/DirectoryAgent/Behaviour/Central.cs +++ b/Mate.Production.Core/Agents/DirectoryAgent/Behaviour/Central.cs @@ -68,6 +68,7 @@ private void CreateHubAgent(FCentralResourceHubInformations.FResourceHubInformat , maxBucketSize: 0 // not used currently , dbConnectionStringGanttPlan: resourceHubInformation.DbConnectionString , dbConnectionStringMaster: resourceHubInformation.MasterDbConnectionString + , pathToGANTTPLANOptRunner: resourceHubInformation.PathToGANTTPLANOptRunner , workTimeGenerator: resourceHubInformation.WorkTimeGenerator as WorkTimeGenerator , debug: Agent.DebugThis , principal: Agent.Context.Self) diff --git a/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs b/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs index 969eb6da..3d6d76ce 100644 --- a/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs +++ b/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs @@ -5,6 +5,7 @@ using Akka.Actor; using Akka.Util.Internal; using Mate.DataCore.Data.Context; +using Mate.DataCore.Data.WrappersForPrimitives; using Mate.DataCore.GanttPlan; using Mate.DataCore.GanttPlan.GanttPlanModel; using Mate.DataCore.Nominal; @@ -14,7 +15,9 @@ using Mate.Production.Core.Helper.DistributionProvider; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; +using static FArticles; using static FCentralActivities; +using static Mate.Production.Core.Agents.ResourceAgent.Resource.Instruction.Central; using Resource = Mate.Production.Core.Agents.ResourceAgent.Resource; namespace Mate.Production.Core.Agents.HubAgent.Behaviour @@ -24,6 +27,7 @@ class Central : Core.Types.Behaviour private Dictionary _scheduledActivities { get; } = new Dictionary(); private string _dbConnectionStringGanttPlan { get; } private string _dbConnectionStringMaster { get; } + private string _pathToGANTTPLANOptRunner { get; } private WorkTimeGenerator _workTimeGenerator { get; } private PlanManager _planManager { get; } = new PlanManager(); private ResourceManager _resourceManager { get; } = new ResourceManager(); @@ -35,11 +39,12 @@ class Central : Core.Types.Behaviour private List _SalesorderMaterialrelations { get; set; } = new List(); private Dictionary _prtResources { get; set; } = new Dictionary(); - public Central(string dbConnectionStringGanttPlan, string dbConnectionStringMaster, WorkTimeGenerator workTimeGenerator, SimulationType simulationType = SimulationType.Default) : base(childMaker: null, simulationType: simulationType) + public Central(string dbConnectionStringGanttPlan, string dbConnectionStringMaster, string pathToGANTTPLANOptRunner, WorkTimeGenerator workTimeGenerator, SimulationType simulationType = SimulationType.Default) : base(childMaker: null, simulationType: simulationType) { _workTimeGenerator = workTimeGenerator; _dbConnectionStringGanttPlan = dbConnectionStringGanttPlan; _dbConnectionStringMaster = dbConnectionStringMaster; + _pathToGANTTPLANOptRunner = pathToGANTTPLANOptRunner; _confirmationManager = new ConfirmationManager(dbConnectionStringGanttPlan); _stockPostingManager = new StockPostingManager(dbConnectionStringGanttPlan); @@ -115,7 +120,7 @@ private void LoadProductionOrders(IActorRef inboxActorRef) CreateComputationalTime("TimeWriteConfirmations", lastStep); System.Diagnostics.Debug.WriteLine("Start GanttPlan"); - GanttPlanOptRunner.RunOptAndExport("Continuous", "C:\\tools\\Ganttplan\\GanttPlanOptRunner.exe"); //changed to Init - merged configs + GanttPlanOptRunner.RunOptAndExport("Continuous", _pathToGANTTPLANOptRunner); //changed to Init - merged configs System.Diagnostics.Debug.WriteLine("Finish GanttPlan"); lastStep = stopwatch.ElapsedMilliseconds - lastStep; @@ -568,8 +573,13 @@ public override bool AfterInit() #region Reporting public void CreateSimulationJob(GptblProductionorderOperationActivity activity, long start, long duration, string requiredCapabilityName) - { - var pub = activity.ToSimulationJob(start, duration, requiredCapabilityName); + { + var pub = MessageFactory.ToSimulationJob(activity, + start, + duration, + requiredCapabilityName + ); + //var pub = activity.ToSimulationJob(start, duration, requiredCapabilityName); Agent.Context.System.EventStream.Publish(@event: pub); } diff --git a/Mate.Production.Core/Agents/HubAgent/Behaviour/Factory.cs b/Mate.Production.Core/Agents/HubAgent/Behaviour/Factory.cs index 81fb45f2..fd36d03f 100644 --- a/Mate.Production.Core/Agents/HubAgent/Behaviour/Factory.cs +++ b/Mate.Production.Core/Agents/HubAgent/Behaviour/Factory.cs @@ -31,9 +31,9 @@ private static IBehaviour Default(long maxBucketSize, WorkTimeGenerator workTime } - public static IBehaviour Central(string dbConnectionStringGanttPlan, string dbConnectionStringMaster, WorkTimeGenerator workTimeGenerator) + public static IBehaviour Central(string dbConnectionStringGanttPlan, string dbConnectionStringMaster, string pathToGANTTPLANOptRunner, WorkTimeGenerator workTimeGenerator) { - return new Central(dbConnectionStringGanttPlan, dbConnectionStringMaster, workTimeGenerator); + return new Central(dbConnectionStringGanttPlan, dbConnectionStringMaster, pathToGANTTPLANOptRunner, workTimeGenerator); } private static IBehaviour Queuing(long maxBucketSize, WorkTimeGenerator workTimeGenerator) diff --git a/Mate.Production.Core/Agents/HubAgent/Hub.Agent.cs b/Mate.Production.Core/Agents/HubAgent/Hub.Agent.cs index c526ec04..c343202e 100644 --- a/Mate.Production.Core/Agents/HubAgent/Hub.Agent.cs +++ b/Mate.Production.Core/Agents/HubAgent/Hub.Agent.cs @@ -24,15 +24,15 @@ public Hub(ActorPaths actorPaths, Configuration configuration, long time, Simula this.Do(o: BasicInstruction.Initialize.Create(target: Self, message: HubAgent.Behaviour.Factory.Get(simType:simtype, maxBucketSize: maxBucketSize, workTimeGenerator: workTimeGenerator))); } - public static Props Props(ActorPaths actorPaths, Configuration configuration, long time, SimulationType simtype, long maxBucketSize, string dbConnectionStringGanttPlan, string dbConnectionStringMaster, WorkTimeGenerator workTimeGenerator, bool debug, IActorRef principal) + public static Props Props(ActorPaths actorPaths, Configuration configuration, long time, SimulationType simtype, long maxBucketSize, string dbConnectionStringGanttPlan, string dbConnectionStringMaster, string pathToGANTTPLANOptRunner, WorkTimeGenerator workTimeGenerator, bool debug, IActorRef principal) { - return Akka.Actor.Props.Create(factory: () => new Hub(actorPaths, configuration, time, simtype, maxBucketSize, dbConnectionStringGanttPlan, dbConnectionStringMaster, workTimeGenerator, debug, principal)); + return Akka.Actor.Props.Create(factory: () => new Hub(actorPaths, configuration, time, simtype, maxBucketSize, dbConnectionStringGanttPlan, dbConnectionStringMaster, pathToGANTTPLANOptRunner, workTimeGenerator, debug, principal)); } - public Hub(ActorPaths actorPaths, Configuration configuration, long time, SimulationType simtype, long maxBucketSize, string dbConnectionStringGanttPlan, string dbConnectionStringMaster, WorkTimeGenerator workTimeGenerator, bool debug, IActorRef principal) + public Hub(ActorPaths actorPaths, Configuration configuration, long time, SimulationType simtype, long maxBucketSize, string dbConnectionStringGanttPlan, string dbConnectionStringMaster, string pathToGANTTPLANOptRunner, WorkTimeGenerator workTimeGenerator, bool debug, IActorRef principal) : base(actorPaths: actorPaths, configuration: configuration, time, debug: debug, principal: principal) { - this.Do(o: BasicInstruction.Initialize.Create(target: Self, message: HubAgent.Behaviour.Factory.Central(dbConnectionStringGanttPlan, dbConnectionStringMaster, workTimeGenerator: workTimeGenerator))); + this.Do(o: BasicInstruction.Initialize.Create(target: Self, message: HubAgent.Behaviour.Factory.Central(dbConnectionStringGanttPlan, dbConnectionStringMaster, pathToGANTTPLANOptRunner, workTimeGenerator: workTimeGenerator))); } protected override void Finish() diff --git a/Mate.Production.Core/Agents/ProductionAgent/Behaviour/Default.cs b/Mate.Production.Core/Agents/ProductionAgent/Behaviour/Default.cs index 82de6634..3099fac4 100644 --- a/Mate.Production.Core/Agents/ProductionAgent/Behaviour/Default.cs +++ b/Mate.Production.Core/Agents/ProductionAgent/Behaviour/Default.cs @@ -222,7 +222,9 @@ private void ArticleProvided(FArticleProvider fArticleProvider) Agent.DebugMessage(msg: $"Article {fArticleProvider.ArticleName} {fArticleProvider.ArticleKey} for {_articleToProduce.Article.Name} {_articleToProduce.Key} has been provided"); - _articleToProduce.ProviderList.AddRange(fArticleProvider.Provider); + var cpy = _articleToProduce.ProviderList.ToArray().ToList(); + cpy.AddRange(fArticleProvider.Provider); + _articleToProduce = _articleToProduce.UpdateProviderList(cpy); if(articleDictionary.AllProvided()) { diff --git a/Mate.Production.Core/Agents/ProductionAgent/Types/DispoArticleDictionary.cs b/Mate.Production.Core/Agents/ProductionAgent/Types/DispoArticleDictionary.cs index 7ff21e89..80900d01 100644 --- a/Mate.Production.Core/Agents/ProductionAgent/Types/DispoArticleDictionary.cs +++ b/Mate.Production.Core/Agents/ProductionAgent/Types/DispoArticleDictionary.cs @@ -9,7 +9,7 @@ namespace Mate.Production.Core.Agents.ProductionAgent.Types { public class DispoArticleDictionary { - public List DispoToArticleRelation = new List(); + private List DispoToArticleRelation = new List(); public FOperation Operation { get; set; } internal List GetAll => DispoToArticleRelation.ToList(); @@ -19,11 +19,21 @@ public DispoArticleDictionary(FOperation operation) } + public List GetProviderList => + DispoToArticleRelation.Select(x => x.Provider).ToList(); + + public void Add(IActorRef dispoRef, FArticle fArticle) { DispoToArticleRelation.Add(new ArticleProvider(dispoRef, fArticle)); } + public void Add(ArticleProvider provider) + { + DispoToArticleRelation.Add(provider); + } + + internal bool AllProvided() { return DispoToArticleRelation.All(x => x.Article.IsProvided); diff --git a/Mate.Production.Core/Agents/ProductionAgent/Types/OperationManager.cs b/Mate.Production.Core/Agents/ProductionAgent/Types/OperationManager.cs index 51208690..4eca1acc 100644 --- a/Mate.Production.Core/Agents/ProductionAgent/Types/OperationManager.cs +++ b/Mate.Production.Core/Agents/ProductionAgent/Types/OperationManager.cs @@ -16,7 +16,7 @@ public class OperationManager internal List GetProviderForOperation(Guid operationKey) { var articleTuple = _articleProvider.Single(x => x.Operation.Key == operationKey); - var provider = articleTuple.DispoToArticleRelation.Select(x => x.Provider).ToList(); + var provider = articleTuple.GetProviderList; return provider; } @@ -75,7 +75,7 @@ public void AddOperation(FOperation fOperation) public int CreateRequiredArticles(FArticle articleToProduce, IActorRef requestingAgent, long currentTime) { - List listAP = new List(); + List listAP = new (); var remainingDuration = articleToProduce.RemainingDuration; foreach (var fOperation in GetOperations.OrderByDescending(x => x.Operation.HierarchyNumber)) { remainingDuration += fOperation.Operation.Duration; @@ -96,7 +96,7 @@ public int CreateRequiredArticles(FArticle articleToProduce, IActorRef requestin , customerDue: articleToProduce.CustomerDue , currentTime: currentTime)); listAP.Add(createdArticleProvider); - provider.DispoToArticleRelation.Add(createdArticleProvider); + provider.Add(createdArticleProvider); } } return listAP.Count; diff --git a/Mate.Production.Core/Agents/StorageAgent/Behaviour/Default.cs b/Mate.Production.Core/Agents/StorageAgent/Behaviour/Default.cs index b50a917b..00597adf 100644 --- a/Mate.Production.Core/Agents/StorageAgent/Behaviour/Default.cs +++ b/Mate.Production.Core/Agents/StorageAgent/Behaviour/Default.cs @@ -52,6 +52,7 @@ private void RequestArticle(FArticle requestItem) var stockReservation = MakeReservationFor(request: item); if (!stockReservation.IsInStock || item.Article.ToBuild) { + item = item.UpdateProviderList(p: new List()); // add to Request queue if not in Stock _requestedArticles.Add(item: item); } @@ -177,7 +178,7 @@ private void ProvideArticle(Guid articleKey) , stockExchangeId: article.StockExchangeId , articleFinishedAt: article.FinishedAt , customerDue: article.CustomerDue - , provider: article.ProviderList) + , provider: article.ProviderList.ToArray().ToList()) , target: article.DispoRequester , logThis: false)); diff --git a/Mate.Production.Core/Environment/Options/GANTTPLANOptRunnerPath.cs b/Mate.Production.Core/Environment/Options/GANTTPLANOptRunnerPath.cs new file mode 100644 index 00000000..59cf875d --- /dev/null +++ b/Mate.Production.Core/Environment/Options/GANTTPLANOptRunnerPath.cs @@ -0,0 +1,20 @@ +using System; +using Mate.Production.Core.Environment.Abstractions; + +namespace Mate.Production.Core.Environment.Options +{ + public class GANTTPLANOptRunnerPath : Option + { + public GANTTPLANOptRunnerPath(string value) + { + _value = value; + } + + public GANTTPLANOptRunnerPath() + { + Action = (config, argument) => { + config.AddOption(o: new GANTTPLANOptRunnerPath(value: argument)); + }; + } + } +} diff --git a/Mate.Production.Core/Environment/Options/MaxQuantity.cs b/Mate.Production.Core/Environment/Options/MaxQuantity.cs new file mode 100644 index 00000000..ef759f8f --- /dev/null +++ b/Mate.Production.Core/Environment/Options/MaxQuantity.cs @@ -0,0 +1,20 @@ +using System; +using Mate.Production.Core.Environment.Abstractions; + +namespace Mate.Production.Core.Environment.Options +{ + public class MaxQuantity : Option + { + public MaxQuantity(int value) + { + _value = value; + } + + public MaxQuantity() + { + Action = (config, argument) => { + config.AddOption(o: new MaxQuantity(value: int.Parse(s: argument))); + }; + } + } +} diff --git a/Mate.Production.Core/Environment/Options/MinQuantity.cs b/Mate.Production.Core/Environment/Options/MinQuantity.cs new file mode 100644 index 00000000..3a4fde08 --- /dev/null +++ b/Mate.Production.Core/Environment/Options/MinQuantity.cs @@ -0,0 +1,20 @@ +using System; +using Mate.Production.Core.Environment.Abstractions; + +namespace Mate.Production.Core.Environment.Options +{ + public class MinQuantity : Option + { + public MinQuantity(int value) + { + _value = value; + } + + public MinQuantity() + { + Action = (config, argument) => { + config.AddOption(o: new MinQuantity(value: int.Parse(s: argument))); + }; + } + } +} diff --git a/Mate.Production.Core/GanttSimulation.cs b/Mate.Production.Core/GanttSimulation.cs index a2622662..1028247f 100644 --- a/Mate.Production.Core/GanttSimulation.cs +++ b/Mate.Production.Core/GanttSimulation.cs @@ -174,6 +174,7 @@ private void CreateHubAgent(IActorRef directory, Configuration configuration) var hubInfo = new FResourceHubInformation(resourceList: _resourceDictionary , dbConnectionString: dbGantt.ConnectionString.Value , masterDbConnectionString: base.DbProduction.ConnectionString.Value + , pathToGANTTPLANOptRunner: configuration.GetOption().Value , workTimeGenerator: randomWorkTime); Simulation.SimulationContext.Tell( message: Directory.Instruction.Central.CreateHubAgent.Create(hubInfo, directory), diff --git a/Mate.Production.Core/Helper/DistributionProvider/OrderGenerator.cs b/Mate.Production.Core/Helper/DistributionProvider/OrderGenerator.cs index b30b67b7..ecd82f27 100644 --- a/Mate.Production.Core/Helper/DistributionProvider/OrderGenerator.cs +++ b/Mate.Production.Core/Helper/DistributionProvider/OrderGenerator.cs @@ -1,12 +1,12 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Mate.DataCore.Data.Context; +using Mate.DataCore.Data.Context; using Mate.DataCore.Data.Initializer.StoredProcedures; using Mate.DataCore.DataModel; using Mate.Production.Core.Environment; using Mate.Production.Core.Environment.Options; using MathNet.Numerics.Distributions; +using System; +using System.Collections.Generic; +using System.Linq; namespace Mate.Production.Core.Helper.DistributionProvider { @@ -17,6 +17,7 @@ public class OrderGenerator private Random _seededRandom { get; set; } private Exponential _exponential { get; set; } private DiscreteUniform _prodVariation { get; set; } + private DiscreteUniform _amountVariation { get; set; } private ContinuousUniform _duetime { get; set; } private MateProductionDb _productionDomainContext { get; } @@ -35,6 +36,11 @@ public OrderGenerator(Configuration simConfig, MateProductionDb productionDomain //get equal distribution from 0 to 1 _prodVariation = new DiscreteUniform(lower: 0, upper: _productIds.Count() - 1, randomSource: _seededRandom); + //get equal distribution from 0 to 1 + _amountVariation = new DiscreteUniform(lower: simConfig.GetOption().Value + , upper: simConfig.GetOption().Value + , randomSource: _seededRandom); + //get equal distribution for duetime //TODO: Change Option from int to double _duetime = new ContinuousUniform(lower: Convert.ToDouble(simConfig.GetOption().Value) @@ -77,8 +83,10 @@ public T_CustomerOrder GetNewRandomOrder(long time) due = time + creationTime + due; System.Diagnostics.Debug.WriteLineIf(condition: _debug, message: "Product(" + productId + ")" + ";" + time + ";" + due); + var amount = _amountVariation.Sample(); + // only Returns new Order does not save context. - var order = _productionDomainContext.CreateNewOrder(articleId: productId, amount: 1, creationTime: time + creationTime, dueTime: due); + var order = _productionDomainContext.CreateNewOrder(articleId: productId, amount: amount, creationTime: time + creationTime, dueTime: due); return order; } } diff --git a/Mate.Production.Immutables/Message/Central/FCentralResourceHubInformations.fs b/Mate.Production.Immutables/Message/Central/FCentralResourceHubInformations.fs index f417350a..a1cb8f66 100644 --- a/Mate.Production.Immutables/Message/Central/FCentralResourceHubInformations.fs +++ b/Mate.Production.Immutables/Message/Central/FCentralResourceHubInformations.fs @@ -3,5 +3,6 @@ ResourceList : obj DbConnectionString : string MasterDbConnectionString : string + PathToGANTTPLANOptRunner : string WorkTimeGenerator: obj } \ No newline at end of file diff --git a/Mate.Test/Online/Integration/ProductionTest.cs b/Mate.Test/Online/Integration/ProductionTest.cs index 4d18219b..6714195c 100644 --- a/Mate.Test/Online/Integration/ProductionTest.cs +++ b/Mate.Test/Online/Integration/ProductionTest.cs @@ -75,7 +75,7 @@ public void RunProduction(int uniqueSimNum, int orderQuantity, ModelSize resourc _testOutputHelper.WriteLine("MateDB Initialization finished"); ResultDBInitializerBasic.DbInitialize(_resultContextDataBase.DbContext); _testOutputHelper.WriteLine("ResultD Basic Initialization finished"); - var messageHub = new ConsoleHub(); + var messageHub = new LoggingHub(); var simConfig = ArgumentConverter.ConfigurationConverter(_resultContextDataBase.DbContext, 1); simConfig.AddOption(new ResultsDbConnectionString(_resultContextDataBase.ConnectionString.Value)); simConfig.ReplaceOption(new TimeToAdvance(new TimeSpan(0L))); diff --git a/Mate.Test/SimulationEnvironment/AgentSystem.cs b/Mate.Test/SimulationEnvironment/AgentSystem.cs index 55125f38..dda70577 100644 --- a/Mate.Test/SimulationEnvironment/AgentSystem.cs +++ b/Mate.Test/SimulationEnvironment/AgentSystem.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics; +using System.IO; using System.Linq; using System.Threading.Tasks; using Akka.TestKit.Xunit; @@ -22,15 +24,23 @@ using Microsoft.EntityFrameworkCore; using NLog; using Xunit; +using Xunit.Abstractions; +using static Akka.IO.Tcp; using PriorityRule = Mate.DataCore.Nominal.PriorityRule; namespace Mate.Test.SimulationEnvironment { - public class AgentSystem : TestKit, IClassFixture + public class AgentSystem : TestKit//, IClassFixture { private readonly string TestMateDb = "Test" + DataBaseConfiguration.MateDb; private readonly string TestMateResultDb = "Test" + DataBaseConfiguration.MateResultDb; + private readonly string logPath = @"C:\temp\TestTracker.txt"; + StreamWriter _streamWriter; + + public AgentSystem() { + _streamWriter = new StreamWriter(logPath); + } [Fact] public void TestRawSQL() @@ -247,344 +257,9 @@ public static IEnumerable GetTestData() [Theory] // [x] [InlineData(SimulationType.Default, 110, 0.00, 0.035, 1337)] // throughput dynamic ruled - [InlineData(SimulationType.Default, 2000, 0.20, 0.03, 169)] - [InlineData(SimulationType.Queuing, 9, 0.20, 0.03, 169)] - //[InlineData(SimulationType.Default, 91000, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Default, 91010, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Default, 91020, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Default, 91030, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Default, 91040, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Default, 91050, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Default, 91060, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Default, 91070, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Default, 91001, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Default, 91011, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Default, 91021, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Default, 91031, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Default, 91041, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Default, 91051, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Default, 91061, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Default, 91071, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Default, 91002, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Default, 91012, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Default, 91022, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Default, 91032, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Default, 91042, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Default, 91052, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Default, 91062, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Default, 91072, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Default, 91003, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Default, 91013, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Default, 91023, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Default, 91033, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Default, 91043, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Default, 91053, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Default, 91063, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Default, 91073, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Default, 91004, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Default, 91014, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Default, 91024, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Default, 91034, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Default, 91044, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Default, 91054, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Default, 91064, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Default, 91074, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Default, 91005, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Default, 91015, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Default, 91025, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Default, 91035, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Default, 91045, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Default, 91055, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Default, 91065, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Default, 91075, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Default, 91006, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Default, 91016, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Default, 91026, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Default, 91036, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Default, 91046, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Default, 91056, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Default, 91066, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Default, 91076, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Default, 91007, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Default, 91017, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Default, 91027, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Default, 91037, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Default, 91047, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Default, 91057, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Default, 91067, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Default, 91077, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Default, 91008, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Default, 91018, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Default, 91028, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Default, 91038, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Default, 91048, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Default, 91058, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Default, 91068, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Default, 91078, 0.05, 0.035, 169)] - // - // - // - //[InlineData(SimulationType.Default, 91009, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Default, 91019, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Default, 91029, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Default, 91039, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Default, 91049, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Default, 91059, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Default, 91069, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Default, 91079, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Queuing, 91000, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 91010, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 91020, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 91030, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 91040, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 91050, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 91060, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 91070, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Queuing, 92001, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92011, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92021, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92031, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92041, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92051, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92061, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 91071, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Queuing, 92002, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92012, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92022, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92032, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92042, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92052, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92062, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 91072, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Queuing, 92003, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92013, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92023, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92033, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92043, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92053, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92063, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 91073, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Queuing, 92004, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92014, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92024, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92034, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92044, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92054, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92064, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 91074, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Queuing, 92005, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92015, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92025, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92035, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92045, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92055, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92065, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 91075, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Queuing, 92006, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92016, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92026, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92036, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92046, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92056, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92066, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 91076, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Queuing, 92007, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92017, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92027, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92037, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92047, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92057, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92067, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 91077, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Queuing, 92008, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92018, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92028, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92038, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92048, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92058, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92068, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 91078, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Queuing, 92009, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92019, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92029, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92039, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92049, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92059, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 92069, 0.35, 0.035, 169)] - //[InlineData(SimulationType.Queuing, 91079, 0.05, 0.035, 169)] - // - //[InlineData(SimulationType.Central, 93000, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Central, 93010, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Central, 93020, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Central, 93030, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Central, 93040, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Central, 93050, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Central, 93060, 0.35, 0.035, 169)] - // - //[InlineData(SimulationType.Central, 93001, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Central, 93011, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Central, 93021, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Central, 93031, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Central, 93041, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Central, 93051, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Central, 93061, 0.35, 0.035, 169)] - // - //[InlineData(SimulationType.Central, 93002, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Central, 93012, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Central, 93022, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Central, 93032, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Central, 93042, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Central, 93052, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Central, 93062, 0.35, 0.035, 169)] - // - //[InlineData(SimulationType.Central, 93003, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Central, 93013, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Central, 93023, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Central, 93033, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Central, 93043, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Central, 93053, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Central, 93063, 0.35, 0.035, 169)] - // - //[InlineData(SimulationType.Central, 93004, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Central, 93014, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Central, 93024, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Central, 93034, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Central, 93044, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Central, 93054, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Central, 93064, 0.35, 0.035, 169)] - // - //[InlineData(SimulationType.Central, 93005, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Central, 93015, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Central, 93025, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Central, 93035, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Central, 93045, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Central, 93055, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Central, 93065, 0.35, 0.035, 169)] - // - //[InlineData(SimulationType.Central, 93006, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Central, 93016, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Central, 93026, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Central, 93036, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Central, 93046, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Central, 93056, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Central, 93066, 0.35, 0.035, 169)] - // - //[InlineData(SimulationType.Central, 93007, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Central, 93017, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Central, 93027, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Central, 93037, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Central, 93047, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Central, 93057, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Central, 93067, 0.35, 0.035, 169)] - // - //[InlineData(SimulationType.Central, 93008, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Central, 93018, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Central, 93028, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Central, 93038, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Central, 93048, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Central, 93058, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Central, 93068, 0.35, 0.035, 169)] - // - //[InlineData(SimulationType.Central, 93009, 0.00, 0.035, 169)] - //[InlineData(SimulationType.Central, 93019, 0.10, 0.035, 169)] - //[InlineData(SimulationType.Central, 93029, 0.15, 0.035, 169)] - //[InlineData(SimulationType.Central, 93039, 0.20, 0.035, 169)] - //[InlineData(SimulationType.Central, 93049, 0.25, 0.035, 169)] - //[InlineData(SimulationType.Central, 93059, 0.30, 0.035, 169)] - //[InlineData(SimulationType.Central, 93069, 0.35, 0.035, 169)] - // - //[InlineData(SimulationType.Default, 10010, 0.20, 0.035, 169, 5, 5, 2, 0.0)] - //[InlineData(SimulationType.Default, 10011, 0.20, 0.035, 169, 5, 5, 2, 0.1)] - //[InlineData(SimulationType.Default, 10012, 0.20, 0.035, 169, 5, 5, 2, 0.2)] - //[InlineData(SimulationType.Default, 10013, 0.20, 0.035, 169, 5, 5, 2, 0.3)] - //[InlineData(SimulationType.Default, 10014, 0.20, 0.035, 169, 5, 5, 2, 0.4)] - //[InlineData(SimulationType.Default, 10015, 0.20, 0.035, 169, 5, 5, 2, 0.5)] - //[InlineData(SimulationType.Default, 10016, 0.20, 0.035, 169, 5, 5, 2, 0.6)] - //[InlineData(SimulationType.Default, 10017, 0.20, 0.035, 169, 5, 5, 2, 0.7)] - //[InlineData(SimulationType.Default, 10018, 0.20, 0.035, 169, 5, 5, 2, 0.8)] - //[InlineData(SimulationType.Default, 10019, 0.20, 0.035, 169, 5, 5, 2, 0.9)] - //[InlineData(SimulationType.Default, 10020, 0.20, 0.035, 169, 5, 5, 2, 1)] - // - //[InlineData(SimulationType.Default, 10110, 0.20, 0.035, 169, 5, 1, 1.41, 0.0)] - //[InlineData(SimulationType.Default, 10111, 0.20, 0.035, 169, 5, 1, 1.41, 0.1)] - //[InlineData(SimulationType.Default, 10112, 0.20, 0.035, 169, 5, 1, 1.41, 0.2)] - //[InlineData(SimulationType.Default, 10113, 0.20, 0.035, 169, 5, 1, 1.41, 0.3)] - //[InlineData(SimulationType.Default, 10114, 0.20, 0.035, 169, 5, 1, 1.41, 0.4)] - //[InlineData(SimulationType.Default, 10115, 0.20, 0.035, 169, 5, 1, 1.41, 0.5)] - //[InlineData(SimulationType.Default, 10116, 0.20, 0.035, 169, 5, 1, 1.41, 0.6)] - //[InlineData(SimulationType.Default, 10117, 0.20, 0.035, 169, 5, 1, 1.41, 0.7)] - //[InlineData(SimulationType.Default, 10118, 0.20, 0.035, 169, 5, 1, 1.41, 0.8)] - //[InlineData(SimulationType.Default, 10119, 0.20, 0.035, 169, 5, 1, 1.41, 0.9)] - //[InlineData(SimulationType.Default, 10120, 0.20, 0.035, 169, 5, 1, 1.41, 1)] - // - //[InlineData(SimulationType.Queuing, 20010, 0.20, 0.035, 169, 5, 5, 2, 0.0)] - //[InlineData(SimulationType.Queuing, 20011, 0.20, 0.035, 169, 5, 5, 2, 0.1)] - //[InlineData(SimulationType.Queuing, 20012, 0.20, 0.035, 169, 5, 5, 2, 0.2)] - //[InlineData(SimulationType.Queuing, 20013, 0.20, 0.035, 169, 5, 5, 2, 0.3)] - //[InlineData(SimulationType.Queuing, 20014, 0.20, 0.035, 169, 5, 5, 2, 0.4)] - //[InlineData(SimulationType.Queuing, 20015, 0.20, 0.035, 169, 5, 5, 2, 0.5)] - //[InlineData(SimulationType.Queuing, 20016, 0.20, 0.035, 169, 5, 5, 2, 0.6)] - //[InlineData(SimulationType.Queuing, 20017, 0.20, 0.035, 169, 5, 5, 2, 0.7)] - //[InlineData(SimulationType.Queuing, 20018, 0.20, 0.035, 169, 5, 5, 2, 0.8)] - //[InlineData(SimulationType.Queuing, 20019, 0.20, 0.035, 169, 5, 5, 2, 0.9)] - //[InlineData(SimulationType.Queuing, 20020, 0.20, 0.035, 169, 5, 5, 2, 1)] - // - //[InlineData(SimulationType.Queuing, 20110, 0.20, 0.035, 169, 5, 1, 1.41, 0.0)] - //[InlineData(SimulationType.Queuing, 20111, 0.20, 0.035, 169, 5, 1, 1.41, 0.1)] - //[InlineData(SimulationType.Queuing, 20112, 0.20, 0.035, 169, 5, 1, 1.41, 0.2)] - //[InlineData(SimulationType.Queuing, 20113, 0.20, 0.035, 169, 5, 1, 1.41, 0.3)] - //[InlineData(SimulationType.Queuing, 20114, 0.20, 0.035, 169, 5, 1, 1.41, 0.4)] - //[InlineData(SimulationType.Queuing, 20115, 0.20, 0.035, 169, 5, 1, 1.41, 0.5)] - //[InlineData(SimulationType.Queuing, 20116, 0.20, 0.035, 169, 5, 1, 1.41, 0.6)] - //[InlineData(SimulationType.Queuing, 20117, 0.20, 0.035, 169, 5, 1, 1.41, 0.7)] - //[InlineData(SimulationType.Queuing, 20118, 0.20, 0.035, 169, 5, 1, 1.41, 0.8)] - //[InlineData(SimulationType.Queuing, 20119, 0.20, 0.035, 169, 5, 1, 1.41, 0.9)] - //[InlineData(SimulationType.Queuing, 20120, 0.20, 0.035, 169, 5, 1, 1.41, 1)] - // - //[InlineData(SimulationType.Central, 30010, 0.20, 0.035, 169, 5, 5, 2, 0.0)] - //[InlineData(SimulationType.Central, 30011, 0.20, 0.035, 169, 5, 5, 2, 0.1)] - //[InlineData(SimulationType.Central, 30012, 0.20, 0.035, 169, 5, 5, 2, 0.2)] - //[InlineData(SimulationType.Central, 30013, 0.20, 0.035, 169, 5, 5, 2, 0.3)] - //[InlineData(SimulationType.Central, 30014, 0.20, 0.035, 169, 5, 5, 2, 0.4)] - //[InlineData(SimulationType.Central, 30015, 0.20, 0.035, 169, 5, 5, 2, 0.5)] - //[InlineData(SimulationType.Central, 30016, 0.20, 0.035, 169, 5, 5, 2, 0.6)] - //[InlineData(SimulationType.Central, 30017, 0.20, 0.035, 169, 5, 5, 2, 0.7)] - //[InlineData(SimulationType.Central, 30018, 0.20, 0.035, 169, 5, 5, 2, 0.8)] - //[InlineData(SimulationType.Central, 30019, 0.20, 0.035, 169, 5, 5, 2, 0.9)] - //[InlineData(SimulationType.Central, 30020, 0.20, 0.035, 169, 5, 5, 2, 1)] - // - //[InlineData(SimulationType.Central, 30110, 0.20, 0.035, 169, 5, 1, 1.41, 0.0)] - //[InlineData(SimulationType.Central, 30111, 0.20, 0.035, 169, 5, 1, 1.41, 0.1)] - //[InlineData(SimulationType.Central, 30112, 0.20, 0.035, 169, 5, 1, 1.41, 0.2)] - //[InlineData(SimulationType.Central, 30113, 0.20, 0.035, 169, 5, 1, 1.41, 0.3)] - //[InlineData(SimulationType.Central, 30114, 0.20, 0.035, 169, 5, 1, 1.41, 0.4)] - //[InlineData(SimulationType.Central, 30115, 0.20, 0.035, 169, 5, 1, 1.41, 0.5)] - //[InlineData(SimulationType.Central, 30116, 0.20, 0.035, 169, 5, 1, 1.41, 0.6)] - //[InlineData(SimulationType.Central, 30117, 0.20, 0.035, 169, 5, 1, 1.41, 0.7)] - //[InlineData(SimulationType.Central, 30118, 0.20, 0.035, 169, 5, 1, 1.41, 0.8)] - //[InlineData(SimulationType.Central, 30119, 0.20, 0.035, 169, 5, 1, 1.41, 0.9)] - //[InlineData(SimulationType.Central, 30120, 0.20, 0.035, 169, 5, 1, 1.41, 1)] - + [InlineData(SimulationType.Central, 41, 0.0, 0.020, 169)] public async Task AgentSystemTest(SimulationType simulationType, int simNr, double deviation, double arrivalRateRun, int seed - , int seedDataGen = 5, double reuse = 1.3, double complxity = 1.9, double organziationaldegree = 0.7) + , int seedDataGen = 5, double reuse = 1.0, double complxity = 1.0, double organziationaldegree = 0.8, int numberOfSalesMaterials = 50, int verticalIntegration = 2) { //var simNr = Random.Shared.Next(); //var simulationType = SimulationType.Default; @@ -612,30 +287,35 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub //dbResult.DbContext.Database.EnsureCreated(); //ResultDBInitializerBasic.DbInitialize(dbResult.DbContext); - SeedInitializer seedInitializer = new SeedInitializer(); + DataCore.Data.Seed.SeedInitializer seedInitializer = new (); seedInitializer.GenerateTestData(TestMateDb, machineCount: 4, toolCount: 6 // , number of Worker // , number of Products , seed: seedDataGen , reuseRatio: reuse , complexityRatio: complxity - , organizationalDegree: organziationaldegree); + , organizationalDegree: organziationaldegree + , numberOfSalesMaterials: numberOfSalesMaterials + , verticalIntegration: verticalIntegration); var simConfig = Production.CLI.ArgumentConverter.ConfigurationConverter(dbResult.DbContext, 1); // update customized Items simConfig.AddOption(new ResultsDbConnectionString(dbResult.ConnectionString.Value)); - simConfig.ReplaceOption(new KpiTimeSpan(240)); + simConfig.ReplaceOption(new GANTTPLANOptRunnerPath("D:\\Work\\GANTTPLAN\\GanttPlanOptRunner.exe")); + simConfig.ReplaceOption(new KpiTimeSpan(1440)); simConfig.ReplaceOption(new TimeConstraintQueueLength(480 * 6 * 2)); // = schicht * setups * x simConfig.ReplaceOption(new SimulationKind(value: simulationType)); simConfig.ReplaceOption(new OrderArrivalRate(value: arrivalRate)); - simConfig.ReplaceOption(new OrderQuantity(value: 10000)); + simConfig.ReplaceOption(new OrderQuantity(value: 1)); simConfig.ReplaceOption(new EstimatedThroughPut(value: throughput)); simConfig.ReplaceOption(new TimePeriodForThroughputCalculation(value: 4000)); simConfig.ReplaceOption(new Production.Core.Environment.Options.Seed(value: seed)); - simConfig.ReplaceOption(new SettlingStart(value: 2880)); - simConfig.ReplaceOption(new MinDeliveryTime(value: 10)); - simConfig.ReplaceOption(new MaxDeliveryTime(value: 15)); - simConfig.ReplaceOption(new SimulationEnd(value: 10080 * 3)); + simConfig.ReplaceOption(new SettlingStart(value: 1440)); + simConfig.ReplaceOption(new MinQuantity(value: 1)); + simConfig.ReplaceOption(new MaxQuantity(value: 5)); + simConfig.ReplaceOption(new MinDeliveryTime(value: 11)); + simConfig.ReplaceOption(new MaxDeliveryTime(value: 18)); + simConfig.ReplaceOption(new SimulationEnd(value: 1440 * 5)); simConfig.ReplaceOption(new SaveToDB(value: true)); simConfig.ReplaceOption(new DebugSystem(value: true)); simConfig.ReplaceOption(new DebugAgents(value: true)); @@ -649,19 +329,23 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub BaseSimulation simContext; + Action consoleWriter = (listnerToWrite, msgToWrite) => { if (listnerToWrite == "Contracts") { _streamWriter.WriteLine(msgToWrite); } }; + if (simulationType == SimulationType.Central) { var ganttPlanContext = Dbms.GetGanttDataBase(DataBaseConfiguration.GP); ganttPlanContext.DbContext.Database.ExecuteSqlRaw("EXEC sp_MSforeachtable 'DELETE FROM ? '"); //Synchronisation GanttPlan - GanttPlanOptRunner.RunOptAndExport("Init", "C:\\tools\\Ganttplan\\GanttPlanOptRunner.exe"); + GanttPlanOptRunner.RunOptAndExport("Init", simConfig.GetOption().Value); - simContext = new GanttSimulation(dbName: TestMateDb, messageHub: new ConsoleHub()); + //simContext = new GanttSimulation(dbName: TestMateDb, messageHub: new LoggingHub()); + simContext = new GanttSimulation(dbName: TestMateDb, messageHub: new ConsoleHub(consoleWriter)); } else { - simContext = new AgentSimulation(TestMateDb, messageHub: new ConsoleHub()); + //simContext = new AgentSimulation(TestMateDb, messageHub: new LoggingHub()); + simContext = new AgentSimulation(TestMateDb, messageHub: new ConsoleHub(consoleWriter)); } var simulation = await simContext.InitializeSimulation(configuration: simConfig); diff --git a/Mate.Test/SimulationEnvironment/BenchmarkBucketSize.cs b/Mate.Test/SimulationEnvironment/BenchmarkBucketSize.cs index 457ee347..6d3b73fe 100644 --- a/Mate.Test/SimulationEnvironment/BenchmarkBucketSize.cs +++ b/Mate.Test/SimulationEnvironment/BenchmarkBucketSize.cs @@ -35,7 +35,7 @@ public class BenchmarkBucketSize public async Task BucketSizeTest() { //InMemoryContext.LoadData(source: _masterDBContext, target: _ctx); - var simContext = new AgentSimulation(dbName: TestMateDb, messageHub: new ConsoleHub()); + var simContext = new AgentSimulation(dbName: TestMateDb, messageHub: new LoggingHub()); var simConfig = Production.Core.Environment.Configuration.Create(args: new object[] { diff --git a/Mate.Test/SimulationEnvironment/BenchmarksOrderArrival.cs b/Mate.Test/SimulationEnvironment/BenchmarksOrderArrival.cs index baef876e..2362b388 100644 --- a/Mate.Test/SimulationEnvironment/BenchmarksOrderArrival.cs +++ b/Mate.Test/SimulationEnvironment/BenchmarksOrderArrival.cs @@ -35,7 +35,7 @@ public class BenchmarksOrderArrivalTest public async Task BenchmarksOrderArrival() { //InMemoryContext.LoadData(source: _masterDBContext, target: _ctx); - var simContext = new AgentSimulation(dbName: TestMateDb, messageHub: new ConsoleHub()); + var simContext = new AgentSimulation(dbName: TestMateDb, messageHub: new LoggingHub()); var simConfig = Mate.Production.Core.Environment.Configuration.Create(args: new object[] { diff --git a/Mate.Test/SimulationEnvironment/CentralSystem.cs b/Mate.Test/SimulationEnvironment/CentralSystem.cs index 9e8cf1a3..76a39815 100644 --- a/Mate.Test/SimulationEnvironment/CentralSystem.cs +++ b/Mate.Test/SimulationEnvironment/CentralSystem.cs @@ -110,7 +110,7 @@ public async Task CentralSystemTest() //Synchronisation GanttPlan GanttPlanOptRunner.RunOptAndExport("Init", "C:\\tools\\Ganttplan\\GanttPlanOptRunner.exe"); - var simContext = new GanttSimulation(dbName: TestMateDb, messageHub: new ConsoleHub()); + var simContext = new GanttSimulation(dbName: TestMateDb, messageHub: new LoggingHub()); var simConfig = ArgumentConverter.ConfigurationConverter(masterPlanResultContext, 1); // update customized Items simConfig.AddOption(new ResultsDbConnectionString(masterPlanResultContext.Database.GetConnectionString())); @@ -122,6 +122,8 @@ public async Task CentralSystemTest() simConfig.ReplaceOption(new EstimatedThroughPut(value: throughput)); simConfig.ReplaceOption(new TimePeriodForThroughputCalculation(value: 4000)); simConfig.ReplaceOption(new Production.Core.Environment.Options.Seed(value: seed)); + simConfig.ReplaceOption(new MinQuantity(value: 1)); + simConfig.ReplaceOption(new MaxQuantity(value: 1)); simConfig.ReplaceOption(new MinDeliveryTime(value: 4)); simConfig.ReplaceOption(new MaxDeliveryTime(value: 6)); simConfig.ReplaceOption(new SettlingStart(value: 60)); diff --git a/Mate.Test/SimulationEnvironment/SEEDInitializer.cs b/Mate.Test/SimulationEnvironment/SEEDInitializer.cs index 2bc40092..e0000728 100644 --- a/Mate.Test/SimulationEnvironment/SEEDInitializer.cs +++ b/Mate.Test/SimulationEnvironment/SEEDInitializer.cs @@ -19,14 +19,13 @@ namespace Mate.Test.SimulationEnvironment public class SeedInitializer : IDisposable { - private readonly string TestMateDb = "Test" + DataBaseConfiguration.MateDb; - public void Dispose() { } public void GenerateTestData(string mateDbName, int machineCount, int toolCount - , int seed, double reuseRatio, double complexityRatio, double organizationalDegree) + , int seed, double reuseRatio, double complexityRatio, double organizationalDegree + , int numberOfSalesMaterials, int verticalIntegration, int lambda = 2) { //Generate Config @@ -36,12 +35,12 @@ public void GenerateTestData(string mateDbName, int machineCount, int toolCount StructureParameter = new StructureParameter() { ComplexityRatio = complexityRatio, // 1.9, ReuseRatio = reuseRatio, // 1.3, - NumberOfSalesMaterials = 100, - VerticalIntegration = 4, + NumberOfSalesMaterials = numberOfSalesMaterials, + VerticalIntegration = verticalIntegration, Seed = seed // 7 }, TransitionMatrixParameter = new TransitionMatrixParameter() { - Lambda = 2, + Lambda = lambda, OrganizationalDegree = organizationalDegree // 0.7 } }; @@ -70,7 +69,7 @@ public void GenerateTestData(string mateDbName, int machineCount, int toolCount .WithDefaultOperationsDurationMean(TimeSpan.FromMinutes(10)) .WithDefaultOperationsDurationVariance(0.20) .WithDefaultSetupDurationMean(TimeSpan.FromMinutes(30)) - .WithDefaultOperationsAmountMean(5) + .WithDefaultOperationsAmountMean(8) .WithDefaultOperationsAmountVariance(0.20); seedConfig.WithOption(resourceConfig); diff --git a/Mate/Controllers/AgentLiveController.cs b/Mate/Controllers/AgentLiveController.cs index b4277afe..7656245e 100644 --- a/Mate/Controllers/AgentLiveController.cs +++ b/Mate/Controllers/AgentLiveController.cs @@ -73,6 +73,8 @@ public void RunAsync(int simulationType, int orderAmount, double arivalRate,int simConfig.ReplaceOption(new DebugSystem(value: false)); simConfig.ReplaceOption(new WorkTimeDeviation(0.2)); simConfig.ReplaceOption(new MaxBucketSize(480)); + simConfig.ReplaceOption(new MinQuantity(1)); + simConfig.ReplaceOption(new MaxQuantity(1)); simConfig.ReplaceOption(new MinDeliveryTime(10)); simConfig.ReplaceOption(new MaxDeliveryTime(15)); simConfig.ReplaceOption(new Mate.Production.Core.Environment.Options.PriorityRule(value: DataCore.Nominal.PriorityRule.LST)); From f4043f7b220f387b8b7b0e3326e02106a174677d Mon Sep 17 00:00:00 2001 From: MarvinMat <38523923+MarvinMat@users.noreply.github.com> Date: Fri, 4 Aug 2023 15:02:06 +0200 Subject: [PATCH 16/16] remove stability kpis for the release --- Mate.DataCore/Nominal/KpiType.cs | 1 - .../CollectorAgent/Collector.Analytics.Job.cs | 22 +-- .../CollectorAgent/Types/StabilityManager.cs | 155 ------------------ .../Agents/HubAgent/Behaviour/Central.cs | 34 +--- .../Agents/HubAgent/Behaviour/Queuing.cs | 12 -- .../Queuing/TotalQueueStabilityManager.cs | 26 --- .../Agents/ResourceAgent/Behaviour/Default.cs | 42 ----- .../Mate.Production.Immutables.fsproj | 1 - .../Reporting/FCreateStabilityMeasurements.fs | 12 -- .../SimulationEnvironment/AgentSystem.cs | 43 +---- 10 files changed, 10 insertions(+), 338 deletions(-) delete mode 100644 Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs delete mode 100644 Mate.Production.Core/Agents/HubAgent/Types/Queuing/TotalQueueStabilityManager.cs delete mode 100644 Mate.Production.Immutables/Reporting/FCreateStabilityMeasurements.fs diff --git a/Mate.DataCore/Nominal/KpiType.cs b/Mate.DataCore/Nominal/KpiType.cs index 3696d865..b3893b15 100644 --- a/Mate.DataCore/Nominal/KpiType.cs +++ b/Mate.DataCore/Nominal/KpiType.cs @@ -16,7 +16,6 @@ public enum KpiType Ooe, CapabilityIdle, ComputationalTime, - Stability, AverageResult = 999 } } diff --git a/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs b/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs index a2f2c165..71d80ece 100644 --- a/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs +++ b/Mate.Production.Core/Agents/CollectorAgent/Collector.Analytics.Job.cs @@ -18,7 +18,6 @@ using static FComputationalTimers; using static FCreateSimulationJobs; using static FCreateSimulationResourceSetups; -using static FCreateStabilityMeasurements; using static FThroughPutTimes; using static FUpdateSimulationJobs; using static FUpdateSimulationWorkProviders; @@ -64,8 +63,7 @@ internal static List GetStreamTypes() typeof(FComputationalTimer), typeof(Hub.Instruction.Default.AddResourceToHub), typeof(BasicInstruction.ResourceBrakeDown), - typeof(FCreateSimulationResourceSetup), - typeof(FCreateStabilityMeasurement) + typeof(FCreateSimulationResourceSetup) }; } @@ -87,7 +85,6 @@ public bool EventHandle(SimulationMonitor simulationMonitor, object message) case FUpdateSimulationWorkProvider m: UpdateProvider(uswp: m); break; case FThroughPutTime m: UpdateThroughputTimes(m); break; case FComputationalTimer m: UpdateComputationalTimes(m); break; - case FCreateStabilityMeasurement m: CreateStabilityMeasurements(m); break; case Collector.Instruction.UpdateLiveFeed m: UpdateFeed(finalCall: m.GetObjectFromMessage); break; //case Hub.Instruction.AddResourceToHub m: RecoverFromBreak(item: m.GetObjectFromMessage); break; //case BasicInstruction.ResourceBrakeDown m: BreakDwn(item: m.GetObjectFromMessage); break; @@ -97,12 +94,6 @@ public bool EventHandle(SimulationMonitor simulationMonitor, object message) return true; } - private void CreateStabilityMeasurements(FCreateStabilityMeasurement m) - { - StabilityManager.Instance.AddEntryForOperation(operationKey: m.Keys.First(), time: m.Time, position: m.Position, resource: m.Resource, start: m.Start, process: m.Process); - - StabilityManager.Instance.AddEntryForBucket(m.Keys, time: m.Time, position: m.Position, resource: m.Resource, start: m.Start, process: m.Process); - } /// /// collect the resourceSetups of resource, cant be updated afterward @@ -160,7 +151,6 @@ private void UpdateFeed(bool finalCall) ThroughPut(finalCall); ComputationalTimes(finalCall); CallTotal(finalCall); - WriteOperationKeys(finalCall); CallAverageIdle(finalCall); LogToDB(writeResultsToDB: finalCall); @@ -205,16 +195,6 @@ private void CallAverageIdle(bool finalCall) Collector.Kpis.AddRange(kpis); } - private void WriteOperationKeys(bool finalCall) - { - if (finalCall && StabilityManager.Instance.HasEntries) - { - //StabilityManager.Instance.WriteFile(Collector.Config.GetOption().Value); - var keyValueDic = StabilityManager.Instance.DoSomeStatistics(Collector.Config.GetOption().Value, Collector.Config.GetOption().Value); - Collector.Kpis.AddRange(keyValueDic); - } - } - private void CallTotal(bool finalCall) { if (finalCall) diff --git a/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs b/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs deleted file mode 100644 index 82c96255..00000000 --- a/Mate.Production.Core/Agents/CollectorAgent/Types/StabilityManager.cs +++ /dev/null @@ -1,155 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Text.Json; -using System.Linq; -using Mate.DataCore.ReportingModel; -using Mate.DataCore.Nominal; - -namespace Mate.Production.Core.Agents.CollectorAgent.Types -{ - public sealed class StabilityManager - { - private static readonly Lazy lazyStabilityManager - = new Lazy(() => new StabilityManager()); - - public static StabilityManager Instance => lazyStabilityManager.Value; - - private Dictionary> OperationDictionary = new Dictionary>(); - - public bool HasEntries => OperationDictionary.Count > 0; - - public void AddEntryForBucket(List keys, long time, int position, string resource, long start, string process) - { - foreach (var key in keys) - { - AddEntryForOperation(time, key, position, resource, start, process); - } - } - - public void AddEntryForOperation(long time, string operationKey, int position, string resource, long start, string process) - { - OperationPosition operationPosition = new(time, position, resource, start, process); - - if (OperationDictionary.TryGetValue(operationKey, out var operationPositionList)) - { - operationPositionList.Add(operationPosition); - } - else - { - OperationDictionary.Add(operationKey, new List() { operationPosition }); - } - } - - - - public void WriteFile(int simNum) - { - string fileName = $"D:\\Work\\Data\\OperationDictionary{simNum}.json"; - string jsonString = JsonSerializer.Serialize(OperationDictionary); - File.WriteAllText(fileName, jsonString); - } - - public void ReadFile() - { - string fileName = "D:\\Work\\Data\\OperationDictionary.json"; - string jsonString = File.ReadAllText(fileName); - OperationDictionary = JsonSerializer.Deserialize>>(jsonString)!; - - DoSomeStatistics(); - } - - public List DoSomeStatistics(int simNum=1, SimulationType simType = SimulationType.Default) - { - List keyValuePairs = new List(); - int result = 0; - int counter = 0; - - List averageList = new List(); - - Dictionary averagePosition = new(); - - Dictionary> averageDistanctPosition = new(); - - //Central - - foreach (KeyValuePair> entry in OperationDictionary) - { - var data = entry.Value.OrderBy(x => x.RealTime).ToList(); - - for(int i = 0; i < data.Count-1; i++) - { - var actual = data[i]; - var next = data[i + 1]; - if (actual.Process != Process.Dequeue.ToString() || next.Process != Process.Enqueue.ToString()) - continue; - - - result++; - var distance = Math.Abs(actual.Start - next.Start); - averageList.Add(distance); - - if(averagePosition.TryGetValue(actual.Position, out var amount)) - { - averagePosition[actual.Position] = amount+1; - averageDistanctPosition[actual.Position].Add(distance); - } - else - { - averagePosition.Add(actual.Position, 1); - averageDistanctPosition.Add(actual.Position, new List() { distance}); - } - - - if ((actual.Resource.Equals(String.Empty) || next.Resource.Equals(String.Empty)) || next.Position.Equals(actual.Position) && next.Resource.Equals(actual.Resource)) - counter++; - - // wieviele Jobs haben tatsächlich die Maschine gewechselt? - // wieviele Jobs haben "nur" die Position in der Warteschlange - - } - } - - var average = averageList.Count != 0 ? averageList.Average() : 0.0; - var ratio = counter > 0 && result > 0 ? Math.Round(((double)counter / (double)result) * 100, 2) : 0; - - keyValuePairs.Add(CreateKpi("RatioUselessReplan", ratio, simNum, simType)); - keyValuePairs.Add(CreateKpi("AverageTimeSpan", average, simNum, simType)); - System.Diagnostics.Debug.WriteLine($"{counter} entries of {result}: {ratio}%"); - System.Diagnostics.Debug.WriteLine($"Average timespan change {average}"); - - foreach (var positon in averagePosition.OrderBy(x => x.Key)) - { - keyValuePairs.Add((CreateKpi($"Position: {positon.Key}", positon.Value, simNum, simType))); - //System.Diagnostics.Debug.WriteLine($"Position: {positon.Key} | {positon.Value}"); - } - - foreach (var distance in averageDistanctPosition.OrderBy(x => x.Key)) - { - keyValuePairs.Add((CreateKpi($"DistancePosition: {distance.Key}", distance.Value.Average(), simNum, simType))); - //System.Diagnostics.Debug.WriteLine($"DIstancePosition: {distance.Key} | {distance.Value.Average()}"); - } - - return keyValuePairs; - } - - - public Kpi CreateKpi(string name, double value, int simNumber, SimulationType simulationType) - { - return new Kpi - { - Name = name, - Value = value, - Time = 1, - KpiType = DataCore.Nominal.KpiType.Stability , - SimulationConfigurationId = 1, - SimulationNumber = simNumber, - IsFinal = true, - IsKpi = true, - SimulationType = simulationType, - ValueMin = 0, - ValueMax = 0 - }; - } - } -} diff --git a/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs b/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs index 3d6d76ce..86d7e0f0 100644 --- a/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs +++ b/Mate.Production.Core/Agents/HubAgent/Behaviour/Central.cs @@ -131,8 +131,7 @@ private void LoadProductionOrders(IActorRef inboxActorRef) { foreach (var resourceState in _resourceManager.resourceStateList) { - JobToStabilityManager(resourceState.ActivityQueue, resourceState, Mate.Production.Core.Agents.CollectorAgent.Types.Process.Dequeue); - + // put to an sorted Queue on each Resource resourceState.ActivityQueue = new Queue( localGanttPlanDbContext.GptblProductionorderOperationActivityResourceInterval @@ -152,7 +151,6 @@ private void LoadProductionOrders(IActorRef inboxActorRef) .OrderBy(x => x.DateFrom) .ToList()); - JobToStabilityManager(resourceState.ActivityQueue, resourceState, Mate.Production.Core.Agents.CollectorAgent.Types.Process.Enqueue); } // filter Done and in Progress? var tempsalesorder = _SalesorderMaterialrelations; @@ -195,36 +193,6 @@ private void LoadProductionOrders(IActorRef inboxActorRef) inboxActorRef.Tell(new FCentralGanttPlanInformations.FCentralGanttPlanInformation(JsonConvert.SerializeObject(timeStamps), "Plan"), this.Agent.Context.Self); } - private void JobToStabilityManager(Queue queue, ResourceState resource, Mate.Production.Core.Agents.CollectorAgent.Types.Process process) - { - if (queue == null || queue.Count == 0 ) - return; - - for (int i = 0; i < queue.Count; i++) - { - AddToStabilityManager(queue.ElementAt(i), i, resource, process); - } - } - private void AddToStabilityManager(GptblProductionorderOperationActivityResourceInterval job, int position, ResourceState resource, Mate.Production.Core.Agents.CollectorAgent.Types.Process process) - { - if (resource.ResourceDefinition.ResourceType != ResourceType.Workcenter) - return; - - var operationKeys = new List(){ job.GetKey}; - var pub = new FCreateStabilityMeasurements.FCreateStabilityMeasurement( - keys: operationKeys - , time: Agent.CurrentTime - , position: position - , resource: resource.ResourceDefinition.Name - , start: job.DateFrom.ToSimulationTime() - , process: process.ToString() - ); - - Agent.Context.System.EventStream.Publish(@event: pub); - - } - - private void StartActivities() { foreach (var resourceState in _resourceManager.resourceStateList) diff --git a/Mate.Production.Core/Agents/HubAgent/Behaviour/Queuing.cs b/Mate.Production.Core/Agents/HubAgent/Behaviour/Queuing.cs index f37c495f..c9eaca56 100644 --- a/Mate.Production.Core/Agents/HubAgent/Behaviour/Queuing.cs +++ b/Mate.Production.Core/Agents/HubAgent/Behaviour/Queuing.cs @@ -233,21 +233,9 @@ private void DoWork(Guid queueKey, IJob job) { var jobQueue = _jobManager.GetActiveJob(queueKey); - //var fristJobInQueue = jobQueue.Peek(Agent.CurrentTime); - // - //foreach (var rescheduledJob in jobQueue.JobQueue) - //{ - // if (rescheduledJob.Key.Equals(job.Key)) - // continue; - // var jobpostion = _jobManager.GetPositionFromActiveJob(jobQueue, job, Agent.CurrentTime); - // AddToStabilityManager(rescheduledJob.Key, jobpostion.Item1, jobpostion.Item2, String.Empty, Process.Dequeue); - // - // AddToStabilityManager(rescheduledJob.Key, jobpostion.Item1 - fristJobInQueue.Duration, jobpostion.Item2 - 1, String.Empty, Process.Enqueue); - //} var nextJob = jobQueue.Dequeue(Agent.CurrentTime); _jobManager.RemoveFromJobTracker(nextJob, this.Agent.CurrentTime); - var operation = nextJob as FOperation; var randomizedDuration = _workTimeGenerator.GetRandomWorkTime(nextJob.Duration, (operation.ProductionAgent.GetHashCode() + operation.Operation.HierarchyNumber).GetHashCode()); diff --git a/Mate.Production.Core/Agents/HubAgent/Types/Queuing/TotalQueueStabilityManager.cs b/Mate.Production.Core/Agents/HubAgent/Types/Queuing/TotalQueueStabilityManager.cs deleted file mode 100644 index 0b5e5f82..00000000 --- a/Mate.Production.Core/Agents/HubAgent/Types/Queuing/TotalQueueStabilityManager.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using static IJobs; - -namespace Mate.Production.Core.Agents.HubAgent.Types.Queuing -{ - internal class TotalQueueStabilityManager - { - List _jobs = new(); - - public int AddJob(IJob job, long time) { - _jobs.Add(job); - return GetIndexOf(job, time); - } - - private int GetIndexOf(IJob job, long time) { - return _jobs.OrderBy(x => x.Priority(time)).ToList().IndexOf(job); - } - - public int RemoveJob(IJob job, long time) { - var pos = GetIndexOf(job, time); - _jobs.RemoveAt(pos); - return pos; - } - } -} diff --git a/Mate.Production.Core/Agents/ResourceAgent/Behaviour/Default.cs b/Mate.Production.Core/Agents/ResourceAgent/Behaviour/Default.cs index 8307c853..f1daa1aa 100644 --- a/Mate.Production.Core/Agents/ResourceAgent/Behaviour/Default.cs +++ b/Mate.Production.Core/Agents/ResourceAgent/Behaviour/Default.cs @@ -123,7 +123,6 @@ private void RevokeJob(Guid jobKey) foreach(var element in ((FBucket)revokedJob.Job).Operations) { (var duration, var opPosition) = _jobInProgress.GetTotalOperationsOfJobInProgress(element.Key,Agent.CurrentTime); - AddToStabilityManager(element.Key, revokedJob.ScopeConfirmation.GetScopeStart() + duration, opPosition, Process.Dequeue); } Agent.DebugMessage(msg: $"Revoking Job from Processing {revokedJob.Job.Name} {revokedJob.Job.Key}", CustomLogger.JOB, LogLevel.Warn); Agent.Send(instruction: Job.Instruction.AcknowledgeRevoke.Create(message: Agent.Context.Self, target: revokedJob.JobAgentRef)); @@ -225,7 +224,6 @@ internal void AcceptProposals(IConfirmations.IConfirmation jobConfirmation) this.UpdateAndRequeuePlanedJobs(jobConfirmation); _scopeQueue.Enqueue(jobConfirmation); - JobToStabilityManager(new List() { jobConfirmation }, Process.Enqueue); Agent.DebugMessage(msg: $"Accepted proposal on resource {Agent.Context.Self.Path.Name} and " + $"start enqueue {jobConfirmation.Job.Name} {jobConfirmation.Key} queueCount: {_scopeQueue.Count}" + @@ -454,9 +452,6 @@ private void RequeueJobs(HashSet toRequeue) { Agent.DebugMessage(msg: $"Remove {toRequeue.Count} from {Agent.Context.Self.Path.Name}", CustomLogger.JOB, LogLevel.Warn); - if(toRequeue.Count > 0) - JobToStabilityManager(toRequeue.ToList(), Process.Dequeue); - foreach (var job in toRequeue) { Agent.DebugMessage(msg: $"Remove for requeue {job.Job.Name} {job.Key} from {Agent.Context.Self.Path.Name}", CustomLogger.JOB, LogLevel.Warn); @@ -502,43 +497,6 @@ void CreateSetupTask(long gap, string type) Agent.Context.System.EventStream.Publish(@event: pub); } - private void JobToStabilityManager(List jobs, Process process) - { - foreach (var job in jobs) - { - foreach (var op in ((FBucket)job.Job).Operations) - { - (var duration, var opposition) = ((TimeConstraintQueue)_scopeQueue).GetPositionOfJobInJob(job.ScopeConfirmation.GetScopeStart(), operationId: op.Key, currentTime:Agent.CurrentTime); - - - int position = - _jobInProgress.GetTotalOperationsOfJobInProgress() + - ((TimeConstraintQueue)_scopeQueue).GetAmountOfPreviousOperations(job.ScopeConfirmation.GetScopeStart()) + - opposition; - AddToStabilityManager(op.Key, job.ScopeConfirmation.GetScopeStart() + duration, position, process); - - } - } - } - private void AddToStabilityManager(Guid key, long scopeStart, int position, Process process) - { - if (_resourceType != ResourceType.Workcenter) - return; - - var operationKeys = new List() { key.ToString() }; - var pub = new FCreateStabilityMeasurements.FCreateStabilityMeasurement( - keys: operationKeys - , time: Agent.CurrentTime - , position: position - , resource: Agent.Name.ToString() - , start: scopeStart - , process: process.ToString() - ); - - Agent.Context.System.EventStream.Publish(@event: pub); - - } - #endregion } diff --git a/Mate.Production.Immutables/Mate.Production.Immutables.fsproj b/Mate.Production.Immutables/Mate.Production.Immutables.fsproj index 44510838..9eb45e4e 100644 --- a/Mate.Production.Immutables/Mate.Production.Immutables.fsproj +++ b/Mate.Production.Immutables/Mate.Production.Immutables.fsproj @@ -59,7 +59,6 @@ - diff --git a/Mate.Production.Immutables/Reporting/FCreateStabilityMeasurements.fs b/Mate.Production.Immutables/Reporting/FCreateStabilityMeasurements.fs deleted file mode 100644 index ffb18194..00000000 --- a/Mate.Production.Immutables/Reporting/FCreateStabilityMeasurements.fs +++ /dev/null @@ -1,12 +0,0 @@ -module FCreateStabilityMeasurements - -open System - - type public FCreateStabilityMeasurement = { - Keys : ResizeArray - Resource : string - Time : int64 - Position : int - Start : int64 - Process : string - } diff --git a/Mate.Test/SimulationEnvironment/AgentSystem.cs b/Mate.Test/SimulationEnvironment/AgentSystem.cs index dda70577..4b30f791 100644 --- a/Mate.Test/SimulationEnvironment/AgentSystem.cs +++ b/Mate.Test/SimulationEnvironment/AgentSystem.cs @@ -117,14 +117,6 @@ public void ReadRawSQL() } - [Fact] - public void TestStatistics() - { - StabilityManager.Instance.ReadFile(); - - Assert.True(true, "yes"); - } - // [Fact(Skip = "MANUAL USE ONLY --> to reset Remote DB")] [Fact] public void ResetAllDatabase() @@ -172,29 +164,7 @@ public void SomethingToPlayWith() } } - - [Fact] - private void GeneratorForWorkdeviations() - { - string path = @"D:\Work\Stability\MyTest2.csv"; - double _deviation = 0.2; - int duration = 10; - var listOfInts = new List(); - for (int i = 0; i < 100000; i++) - { - - var _sourceRandom = new Random(Seed: Guid.NewGuid().GetHashCode()); - listOfInts.Add((int)Math.Round(LogNormal.WithMeanVariance(duration, duration * _deviation, _sourceRandom).Sample())); - - } - - if (!System.IO.File.Exists(path)) - { - System.IO.File.WriteAllLines(path, listOfInts.Select(x => string.Join(",", x))); - } - - } - + private void GetSetups(M_Resource resource, MateProductionDb masterCtx) { if (!resource.IsPhysical) @@ -257,7 +227,7 @@ public static IEnumerable GetTestData() [Theory] // [x] [InlineData(SimulationType.Default, 110, 0.00, 0.035, 1337)] // throughput dynamic ruled - [InlineData(SimulationType.Central, 41, 0.0, 0.020, 169)] + [InlineData(SimulationType.Queuing, 44, 0.0, 0.020, 169)] public async Task AgentSystemTest(SimulationType simulationType, int simNr, double deviation, double arrivalRateRun, int seed , int seedDataGen = 5, double reuse = 1.0, double complxity = 1.0, double organziationaldegree = 0.8, int numberOfSalesMaterials = 50, int verticalIntegration = 2) { @@ -306,16 +276,16 @@ public async Task AgentSystemTest(SimulationType simulationType, int simNr, doub simConfig.ReplaceOption(new TimeConstraintQueueLength(480 * 6 * 2)); // = schicht * setups * x simConfig.ReplaceOption(new SimulationKind(value: simulationType)); simConfig.ReplaceOption(new OrderArrivalRate(value: arrivalRate)); - simConfig.ReplaceOption(new OrderQuantity(value: 1)); + simConfig.ReplaceOption(new OrderQuantity(value: 1000)); simConfig.ReplaceOption(new EstimatedThroughPut(value: throughput)); simConfig.ReplaceOption(new TimePeriodForThroughputCalculation(value: 4000)); simConfig.ReplaceOption(new Production.Core.Environment.Options.Seed(value: seed)); simConfig.ReplaceOption(new SettlingStart(value: 1440)); simConfig.ReplaceOption(new MinQuantity(value: 1)); - simConfig.ReplaceOption(new MaxQuantity(value: 5)); + simConfig.ReplaceOption(new MaxQuantity(value: 1)); simConfig.ReplaceOption(new MinDeliveryTime(value: 11)); simConfig.ReplaceOption(new MaxDeliveryTime(value: 18)); - simConfig.ReplaceOption(new SimulationEnd(value: 1440 * 5)); + simConfig.ReplaceOption(new SimulationEnd(value: 1440 * 30)); simConfig.ReplaceOption(new SaveToDB(value: true)); simConfig.ReplaceOption(new DebugSystem(value: true)); simConfig.ReplaceOption(new DebugAgents(value: true)); @@ -393,6 +363,9 @@ private void ClearResultDBby(SimulationNumber simNr, string dbName) _ctxResult.RemoveRange(entities: itemsToRemove); _ctxResult.RemoveRange(entities: _ctxResult.Kpis.Where(predicate: a => a.SimulationNumber.Equals(_simNr.Value))); _ctxResult.RemoveRange(entities: _ctxResult.StockExchanges.Where(predicate: a => a.SimulationNumber.Equals(_simNr.Value))); + _ctxResult.RemoveRange(entities: _ctxResult.TaskItems.Where(predicate: a => a.SimulationNumber.Equals(_simNr.Value))); + _ctxResult.RemoveRange(entities: _ctxResult.SimulationOrders.Where(predicate: a => a.SimulationNumber.Equals(_simNr.Value))); + _ctxResult.RemoveRange(entities: _ctxResult.SimulationResourceSetups.Where(predicate: a => a.SimulationNumber.Equals(_simNr.Value))); _ctxResult.SaveChanges(); } }