Skip to content

Commit d54e699

Browse files
committed
Move transcriber task to dedicated file
1 parent ff6e97d commit d54e699

8 files changed

Lines changed: 215 additions & 84 deletions

File tree

SharpPDDL/Collections/Comparers.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System.Collections.Generic;
2+
3+
namespace SharpPDDL
4+
{
5+
internal class SortCumulativedTransitionChargeHelper : IComparer<Crisscross>
6+
{
7+
public int Compare(Crisscross c1, Crisscross c2)
8+
{
9+
int CumulativedTransitionChargeRes = c1.CumulativedTransitionCharge.CompareTo(c2.CumulativedTransitionCharge);
10+
11+
// In case of the same CumulativedTransitionCharges' value compare CheckSums
12+
if (CumulativedTransitionChargeRes == 0)
13+
{
14+
if (c1.Content is null || c2.Content is null)
15+
return 0;
16+
17+
return c1.Content.CheckSum.CompareTo(c2.Content.CheckSum);
18+
}
19+
20+
return CumulativedTransitionChargeRes;
21+
}
22+
}
23+
24+
internal class TupleCo : IComparer<KeyValuePair<Crisscross, List<CrisscrossChildrenCon>>>
25+
{
26+
public int Compare(KeyValuePair<Crisscross, List<CrisscrossChildrenCon>> c1, KeyValuePair<Crisscross, List<CrisscrossChildrenCon>> c2)
27+
=> c1.Key.CumulativedTransitionCharge.CompareTo(c2.Key.CumulativedTransitionCharge);
28+
}
29+
}

SharpPDDL/Collections/Crisscross.cs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -73,21 +73,6 @@ public IEnumerator GetEnumerator()
7373
{
7474
return new CrisscrossEnum(this);
7575
}
76-
77-
// Nested class to do descending sort on make property.
78-
private class SortCumulativedTransitionChargeHelper : IComparer<Crisscross>
79-
{
80-
public int Compare(Crisscross c1, Crisscross c2)
81-
{
82-
int CumulativedTransitionChargeRes = c1.CumulativedTransitionCharge.CompareTo(c2.CumulativedTransitionCharge);
83-
84-
// In case of the same CumulativedTransitionCharges' value compare CheckSums
85-
if (CumulativedTransitionChargeRes == 0)
86-
return c1.Content.CheckSum.CompareTo(c2.Content.CheckSum);
87-
88-
return CumulativedTransitionChargeRes;
89-
}
90-
}
9176

9277
// Method to return IComparer object for sort helper for SortedSet<> collection.
9378
internal static IComparer<Crisscross> SortCumulativedTransitionCharge() =>

SharpPDDL/CrisscrossesGenerate/CrisscrossGenerator.cs

Lines changed: 20 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -180,32 +180,32 @@ internal void ReStart()
180180

181181
internal Task Stop()
182182
{
183-
Task Stopping = new Task(() =>
184-
{
185-
GloCla.Tracer?.TraceEvent(TraceEventType.Information, 61, GloCla.ResMan.GetString("I5"));
183+
Task Stopping = new Task(() =>
184+
{
185+
GloCla.Tracer?.TraceEvent(TraceEventType.Information, 61, GloCla.ResMan.GetString("I5"));
186186

187-
//use internal Cancellation Token
188-
if (!CancellationCrisscrossGenerator.IsCancellationRequested)
189-
InternalCancellationCrisscrossGenerator.Cancel();
190-
else
191-
return;
187+
//use internal Cancellation Token
188+
if (!CancellationCrisscrossGenerator.IsCancellationRequested)
189+
InternalCancellationCrisscrossGenerator.Cancel();
190+
else
191+
return;
192192

193-
//make sure there is no task wainting for buffor add element
194-
goalChecker.CheckingGoalRealizationARE.Set();
195-
crisscrossNewPossiblesCreator.BuildingNewCrisscrossARE.Set();
196-
crisscrossReducer.ReducingCrisscrossARE.Set();
193+
//make sure there is no task wainting for buffor add element
194+
goalChecker.CheckingGoalRealizationARE.Set();
195+
crisscrossNewPossiblesCreator.BuildingNewCrisscrossARE.Set();
196+
crisscrossReducer.ReducingCrisscrossARE.Set();
197197

198-
//wait for all task finish
199-
Task.WaitAll(new Task[] { goalChecker.CheckingGoal, crisscrossNewPossiblesCreator.BuildingNewCrisscross, crisscrossReducer.BuildingNewCrisscross }, 100);
198+
//wait for all task finish
199+
Task.WaitAll(new Task[] { goalChecker.CheckingGoal, crisscrossNewPossiblesCreator.BuildingNewCrisscross, crisscrossReducer.BuildingNewCrisscross }, 100);
200200

201-
GloCla.Tracer?.TraceEvent(TraceEventType.Stop, 60, GloCla.ResMan.GetString("Sp6"));
202-
});
201+
GloCla.Tracer?.TraceEvent(TraceEventType.Stop, 60, GloCla.ResMan.GetString("Sp6"));
202+
});
203203

204-
if (Stopping is null)
205-
return Task.CompletedTask;
204+
if (Stopping is null)
205+
return Task.CompletedTask;
206206

207-
Stopping.Start();
208-
return Stopping;
207+
Stopping.Start();
208+
return Stopping;
209209
}
210210

211211
private void CheckAllGenerated()
@@ -234,42 +234,5 @@ private void CheckAllGenerated()
234234

235235
CrisscrossesGenerated?.Invoke();
236236
}
237-
238-
internal Task<(Crisscross, SortedSet<Crisscross>, SortedList<string, Crisscross>)> TranscribeState(Crisscross NewRoot, CancellationToken cancellationToken)
239-
{
240-
Task<(Crisscross, SortedSet<Crisscross>, SortedList<string, Crisscross>)> Transcribing = new Task<(Crisscross, SortedSet<Crisscross>, SortedList<string, Crisscross>)>(() =>
241-
{
242-
GloCla.Tracer?.TraceEvent(TraceEventType.Start, 122, GloCla.ResMan.GetString("Sa10"));
243-
244-
List<ThumbnailObject> NewThumbnailObjects = new List<ThumbnailObject>();
245-
foreach (ThumbnailObject TO in NewRoot.Content.ThumbnailObjects)
246-
NewThumbnailObjects.Add(new ThumbnailObjectPrecursor<object>(TO, false) as ThumbnailObject);
247-
248-
Crisscross NewOne = new Crisscross
249-
{
250-
Content = new PossibleState(NewThumbnailObjects)
251-
};
252-
253-
SortedSet<Crisscross> ChildlessCrisscrosses = new SortedSet<Crisscross>(Crisscross.SortCumulativedTransitionCharge())
254-
{
255-
NewOne
256-
};
257-
258-
SortedList<string, Crisscross> NewIndexedStates = new SortedList<string, Crisscross>
259-
{
260-
{ NewOne.Content.CheckSum, NewOne }
261-
};
262-
263-
(Crisscross NewRoot, SortedSet<Crisscross> ChildlessCrisscrosses, SortedList<string, Crisscross> NewIndexedStates) RetTuple = (NewOne, ChildlessCrisscrosses, NewIndexedStates);
264-
265-
GloCla.Tracer?.TraceEvent(TraceEventType.Stop, 123, GloCla.ResMan.GetString("Sp10"));
266-
267-
return RetTuple;
268-
});
269-
270-
Transcribing.Start();
271-
272-
return Transcribing;
273-
}
274237
}
275238
}

SharpPDDL/DomainPlanner.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,6 @@ private void CheckingIfGenerateActionList(uint ActMinCumulativeCost)
160160
if (!NOTIsFoundingChippest.Any())
161161
return;
162162

163-
164163
var FoundedChipStates = NOTIsFoundingChippest.Where(FG => (1.05 * FG.Value.First().CumulativedTransitionCharge < ActMinCumulativeCost));
165164
if (!FoundedChipStates.Any())
166165
return;
@@ -337,9 +336,12 @@ private void GoToCrisscrossAndReachGoals(KeyValuePair<Crisscross, List<GoalPDDL>
337336
PlanGeneratedInDomainPlanner?.Invoke(Plan);
338337
}
339338

339+
//make class of transcriber
340+
Transcriber transcriber = new Transcriber(Found.Key, Owner.actions);
341+
340342
Stopping.Wait();
341343
Task Realizing = DomainExecutor.RealizeIt(FoKePo, CancellationDomein);
342-
Task<(Crisscross NewRoot, SortedSet<Crisscross>, SortedList<string, Crisscross> NewIndexedStates)> Transcribing = CurrentBuilder.TranscribeState(FoKePo.Last().Child, CancellationDomein);
344+
Task Transcribing = transcriber.TranscribeState(CancellationDomein);
343345
Task.WaitAny(new Task[] { Realizing, Transcribing }, ExternalCancellationDomein);
344346

345347
if (ExternalCancellationDomein.IsCancellationRequested)
@@ -349,19 +351,19 @@ private void GoToCrisscrossAndReachGoals(KeyValuePair<Crisscross, List<GoalPDDL>
349351
else if (Realizing.IsCompleted)
350352
{
351353
Transcribing.Wait(5000);
352-
CurrentBuilder.InitBuffors(Transcribing.Result.Item2, null, null, Transcribing.Result.NewIndexedStates);
354+
CurrentBuilder.InitBuffors(null, transcriber.ChildlessCrisscrosses, null, transcriber.NewIndexedStates);
353355
}
354356
else if (Transcribing.IsCompleted)
355357
{
356-
CurrentBuilder.InitBuffors(Transcribing.Result.Item2, null, null, Transcribing.Result.NewIndexedStates);
358+
CurrentBuilder.InitBuffors(null, transcriber.ChildlessCrisscrosses, null, transcriber.NewIndexedStates);
357359
//zaczęcie generowania nowych stanów
358360

359361
Realizing.Wait();
360362

361363
//zaprzestanie generowania nowych stanów
362364
}
363365

364-
CurrentBuilded = Transcribing.Result.NewRoot;// FoKePo.Last().Child;
366+
CurrentBuilded = transcriber.NewOne;
365367
}
366368

367369
RemoveGoals(Found.Value);

SharpPDDL/Execution/WholeActionExecutionLambda.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@ protected override Expression VisitParameter(ParameterExpression node)
137137
}
138138
}
139139

140-
141140
return _parameters[ActualObjectPDDL.Elements[index].AllParamsOfActClassPos.Value];
142141
}
143142
catch (ArgumentNullException)

SharpPDDL/Executor.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,9 +169,6 @@ protected void ActionListRealize(List<CrisscrossChildrenCon> ActionList, Cancell
169169
ExecuteTheAction(Act, CancelationPlanImplementor);
170170
}
171171

172-
173-
174-
175172
GloCla.Tracer?.TraceEvent(TraceEventType.Stop, 26, GloCla.ResMan.GetString("Sp2"));
176173
PlanRealized?.Invoke();
177174
}

SharpPDDL/SharpPDDL.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
- Optimization of making solution some kind of problems
1313
- Fix some issues</PackageReleaseNotes>
1414
<RepositoryUrl>https://github.com/ArBom/SharpPDDL.git</RepositoryUrl>
15-
<Version>0.3.2.4</Version>
15+
<Version>0.3.2.5</Version>
1616
<PackageTags>GOAP;planning;AI;IIoT</PackageTags>
1717
<SignAssembly>false</SignAssembly>
1818
<DelaySign>false</DelaySign>
@@ -24,8 +24,8 @@
2424
<PackageReadmeFile>README.md</PackageReadmeFile>
2525
<PackageProjectUrl>https://github.com/ArBom/SharpPDDL</PackageProjectUrl>
2626
<NeutralLanguage></NeutralLanguage>
27-
<AssemblyVersion>0.3.2.4</AssemblyVersion>
28-
<FileVersion>0.3.2.4</FileVersion>
27+
<AssemblyVersion>0.3.2.5</AssemblyVersion>
28+
<FileVersion>0.3.2.5</FileVersion>
2929
</PropertyGroup>
3030

3131
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

SharpPDDL/Transcriber.cs

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Diagnostics;
4+
using System.Linq;
5+
using System.Threading;
6+
using System.Threading.Tasks;
7+
8+
namespace SharpPDDL
9+
{
10+
internal class Transcriber
11+
{
12+
//New root of states
13+
internal readonly Crisscross NewOne;
14+
15+
private readonly List<ActionPDDL> Actions;
16+
17+
//Crisscroses without child in prev. run, spots to start run alg.
18+
internal readonly SortedSet<Crisscross> ChildlessCrisscrosses;
19+
20+
//List of all Crisscrosses in NewOne
21+
internal readonly SortedList<string, Crisscross> NewIndexedStates;
22+
23+
//Collection of Crisscrosses waiting to pin into NewOne "tree"
24+
//private SortedSet<KeyValuePair<uint, Crisscross>> NotTranscribedChildYet;
25+
26+
private SortedSet<KeyValuePair<Crisscross, List<CrisscrossChildrenCon>>> NotTranscribedChildYet;
27+
28+
//List of Crisscrosses pined into NewOne with alternatives Root, candidates to reduce
29+
private List<Crisscross> PossibleToCrisscrossReduce;
30+
31+
internal Transcriber(Crisscross NewRoot, List<ActionPDDL> actions)
32+
{
33+
this.Actions = actions;
34+
35+
List<ThumbnailObject> NewThumbnailObjects = new List<ThumbnailObject>();
36+
foreach (ThumbnailObject TO in NewRoot.Content.ThumbnailObjects)
37+
NewThumbnailObjects.Add(new ThumbnailObjectPrecursor<object>(TO, false) as ThumbnailObject);
38+
39+
NewOne = new Crisscross
40+
{
41+
Content = new PossibleState(NewThumbnailObjects)
42+
};
43+
44+
NotTranscribedChildYet = new SortedSet<KeyValuePair<Crisscross, List<CrisscrossChildrenCon>>>(new TupleCo())
45+
{
46+
new KeyValuePair<Crisscross, List<CrisscrossChildrenCon>>(NewOne, NewRoot.Children)
47+
};
48+
49+
ChildlessCrisscrosses = new SortedSet<Crisscross>(Crisscross.SortCumulativedTransitionCharge());
50+
51+
PossibleToCrisscrossReduce = new List<Crisscross>() { NewOne };
52+
53+
NewIndexedStates = new SortedList<string, Crisscross>
54+
{
55+
{ NewOne.Content.CheckSum, NewOne }
56+
};
57+
}
58+
59+
private Task TranscribeOne(CancellationToken cancellationToken)
60+
{
61+
Task TranscribeTask = new Task(() =>
62+
{
63+
while (NotTranscribedChildYet.Any() && !cancellationToken.IsCancellationRequested)
64+
{
65+
KeyValuePair<Crisscross, List<CrisscrossChildrenCon>> keyValuePair = NotTranscribedChildYet.First();
66+
Crisscross WorkWithIt = keyValuePair.Key;
67+
68+
foreach (CrisscrossChildrenCon C in keyValuePair.Value)
69+
{
70+
ThumbnailObject[] SetToCheck = new ThumbnailObject[C.ActionArgThOb.Length];
71+
72+
for (int i = 0; i != C.ActionArgThOb.Length; i++)
73+
SetToCheck[i] = WorkWithIt.Content.ThumbnailObjects.First(TO => TO.OriginalObj.Equals(C.ActionArgThOb[i].OriginalObj));
74+
75+
object ResultOfCheck = Actions[C.ActionNr].InstantActionPDDLSimplified.DynamicInvoke(SetToCheck);
76+
77+
if (ResultOfCheck is null)
78+
continue;
79+
80+
var ResultOfCheckasList = (List<List<KeyValuePair<ushort, ValueType>>>)ResultOfCheck;
81+
var ChangedThObs = new List<ThumbnailObject>();
82+
83+
for (int j = 0; j < SetToCheck.Length; j++)
84+
{
85+
var ChangedThumbnailObject = SetToCheck[j].CreateChild(ResultOfCheckasList[j]);
86+
ChangedThObs.Add(ChangedThumbnailObject);
87+
}
88+
89+
PossibleState possibleState = new PossibleState(WorkWithIt.Content, ChangedThObs);
90+
WorkWithIt.Add(possibleState, C.ActionNr, SetToCheck, C.ActionCost, out Crisscross AddedItem);
91+
92+
if (NewIndexedStates.Any(s => s.Key == AddedItem.Content.CheckSum))
93+
{
94+
if (NewIndexedStates.Any(s => s.Value.Content.Compare(ref AddedItem.Content)))
95+
continue;
96+
}
97+
98+
if (WorkWithIt.AlternativeRoots.Any())
99+
{
100+
lock (PossibleToCrisscrossReduce)
101+
{
102+
PossibleToCrisscrossReduce.Add(AddedItem);
103+
}
104+
}
105+
else
106+
{
107+
try
108+
{
109+
NewIndexedStates.Add(AddedItem.Content.CheckSum, AddedItem);
110+
}
111+
catch { }
112+
}
113+
114+
if (C.Child.Children.Any())
115+
NotTranscribedChildYet.Add(new KeyValuePair<Crisscross, List<CrisscrossChildrenCon>>(AddedItem, C.Child.Children));
116+
else
117+
ChildlessCrisscrosses.Add(AddedItem);
118+
119+
}
120+
121+
NotTranscribedChildYet.Remove(keyValuePair);
122+
}
123+
});
124+
125+
TranscribeTask.Start();
126+
127+
return TranscribeTask;
128+
}
129+
130+
internal Task TranscribeState(CancellationToken cancellationToken)
131+
{
132+
Task Transcribing = new Task(() =>
133+
{
134+
GloCla.Tracer?.TraceEvent(TraceEventType.Start, 122, GloCla.ResMan.GetString("Sa10"));
135+
AutoResetEvent autoResetEvent = new AutoResetEvent(true);
136+
object CrisscrossReduceLocker = new Object();
137+
CrisscrossReducer crisscrossReducer = new CrisscrossReducer(NewOne, autoResetEvent, PossibleToCrisscrossReduce, CrisscrossReduceLocker, null, null);
138+
crisscrossReducer.IndexStates(NewIndexedStates);
139+
140+
//Task transcribeOne = TranscribeOne(cancellationToken);
141+
crisscrossReducer.Start(cancellationToken);
142+
//transcribeOne.Wait();
143+
ChildlessCrisscrosses.Add(NewOne);
144+
145+
if (cancellationToken.IsCancellationRequested)
146+
ChildlessCrisscrosses.UnionWith(NotTranscribedChildYet.Select(NT => NT.Key));
147+
148+
GloCla.Tracer?.TraceEvent(TraceEventType.Stop, 123, GloCla.ResMan.GetString("Sp10"));
149+
}, cancellationToken);
150+
151+
Transcribing.Start();
152+
153+
return Transcribing;
154+
}
155+
}
156+
}

0 commit comments

Comments
 (0)