Skip to content

Commit f6b2a21

Browse files
committed
Add possibility of uses static funcs in time of solution founding and execution them
1 parent db857b1 commit f6b2a21

9 files changed

Lines changed: 143 additions & 55 deletions

File tree

SharpPDDL/Collections/CrisscrossRefEnum.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ internal bool MoveNext()
4646
// continue;
4747

4848
//Avoid the loopping
49-
if (Chain_chainInd.Content.Equals(Chain_chainInd.Children[i].Child.Root.Content))
49+
if (Chain_chainInd.Content.Equals(Chain_chainInd.Children[i].Child.Root?.Content))
5050
{
5151
if (Chains.Count == chainInd + 1)
5252
Chains.Add(new ChainStruct(null, 0));

SharpPDDL/DomainPlanner.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -162,13 +162,13 @@ private void FoundSolsVoid(KeyValuePair<Crisscross, List<GoalPDDL>> Found)
162162
private void CheckingIfGenerateActionList(uint ActMinCumulativeCost)
163163
{
164164
//check if still exists cheaper state in pool
165-
if (ActMinCumulativeCost >= CurrentBuilder.CheckCost())
166-
return;
165+
//if (ActMinCumulativeCost >= CurrentBuilder.CheckCost())
166+
// return;
167167

168168
var NOTIsFoundingChippest = FoundedGoals.Where(FG => !FG.Key.IsFoundingChippest);
169169
if (NOTIsFoundingChippest is null)
170170
{
171-
currentMinCumulativeCostUpdate -= CheckingIfGenerateActionList;
171+
//currentMinCumulativeCostUpdate -= CheckingIfGenerateActionList;
172172
//TODO jakiś błąd tu program nie powinien wejść
173173
return;
174174
}
@@ -184,7 +184,7 @@ private void CheckingIfGenerateActionList(uint ActMinCumulativeCost)
184184
Crisscross StateToHit = Solution.Value.Aggregate((curMin, v) => (curMin == null || (v.CumulativedTransitionCharge) < curMin.CumulativedTransitionCharge ? v : curMin));
185185

186186
//Crisscross StateToHit = Solution.Value.Min(v => v.CumulativedTransitionCharge);
187-
currentMinCumulativeCostUpdate -= CheckingIfGenerateActionList;
187+
//currentMinCumulativeCostUpdate -= CheckingIfGenerateActionList;
188188

189189
KeyValuePair<Crisscross, List<GoalPDDL>> GenerList = FoundedCrisscrosses.First(FC => FC.Key == StateToHit);
190190
//FoundedCrisscrosses.Clear();
@@ -369,7 +369,7 @@ internal void GenList(KeyValuePair<Crisscross, List<GoalPDDL>> Found)
369369
//OK
370370
else
371371
{
372-
CurrentBuilded.Dispose();
372+
//CurrentBuilded.Dispose();
373373
CurrentBuilded = Transcribing.Result.NewRoot;
374374
CurrentBuilder.InitBuffors(Transcribing.Result.Item2, null, null, Transcribing.Result.NewIndexedStates);
375375

SharpPDDL/EffectPDDL/EffectLambdaPDDL.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,10 +199,28 @@ protected override Expression VisitMember(MemberExpression node)
199199

200200
protected override Expression VisitMethodCall(MethodCallExpression node)
201201
{
202+
string MethodName = node.Method.Name;
203+
202204
if (node.Method.IsStatic)
203-
return node;
205+
{
206+
if (!node.Arguments.Any())
207+
{
208+
string WarningArgMess = String.Format(GloCla.ResMan.GetString("W19"), MethodName);
209+
GloCla.Tracer?.TraceEvent(TraceEventType.Warning, 150, WarningArgMess);
210+
}
211+
212+
if (node.Method.ReturnType == typeof(void))
213+
{
214+
string WarningRetMess = String.Format(GloCla.ResMan.GetString("W20"), MethodName);
215+
GloCla.Tracer?.TraceEvent(TraceEventType.Warning, 151, WarningRetMess);
216+
}
217+
218+
ReadOnlyCollection<Expression> ChangedArguments = Visit(node.Arguments);
219+
MethodCallExpression ChangedMethod = Expression.Call(node.Method, ChangedArguments);
220+
return ChangedMethod;
221+
}
204222

205-
string ExceptionMess = String.Format(GloCla.ResMan.GetString("C16"), node.Method.Name);
223+
string ExceptionMess = String.Format(GloCla.ResMan.GetString("C16"), MethodName);
206224
GloCla.Tracer?.TraceEvent(TraceEventType.Critical, 77, ExceptionMess);
207225
throw new Exception(ExceptionMess);
208226
}

SharpPDDL/EffectPDDL/EffectPDDL.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ abstract internal class EffectPDDL : ObjectPDDL
1212
readonly internal Expression DestinationMember;
1313

1414
protected Expression _SourceFunc;
15-
internal protected virtual Expression SourceFunc
15+
public virtual Expression SourceFunc
1616
{
1717
get { return _SourceFunc; }
1818
protected set

SharpPDDL/Execution/WholeActionExecutionLambda.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace SharpPDDL
1010
internal class WholeActionExecutionLambda : ExpressionVisitor
1111
{
1212
ObjectPDDL ActualObjectPDDL;
13-
List<ParameterExpression> Parameters;
13+
List<ParameterExpression> LambdaParameters;
1414
List<ParameterExpression> _parameters = new List<ParameterExpression>();
1515

1616
internal readonly Delegate InstantExecutionPDDL;
@@ -113,7 +113,7 @@ protected override Expression VisitLambda<T>(Expression<T> node)
113113
else
114114
NodeL = node.Body;
115115

116-
Parameters = node.Parameters.ToList();
116+
LambdaParameters = node.Parameters.ToList();
117117

118118
return Visit(NodeL);
119119
}
@@ -124,7 +124,20 @@ protected override Expression VisitParameter(ParameterExpression node)
124124

125125
try
126126
{
127-
int index = Parameters.FindIndex(p => p.Name == node.Name);
127+
int index = LambdaParameters.FindIndex(p => p.Name == node.Name);
128+
129+
if (ActualObjectPDDL is EffectPDDL && ActualObjectPDDL.Elements.Length == 2)
130+
{
131+
EffectPDDL ActualEffectPDDL = ActualObjectPDDL as EffectPDDL;
132+
if (ActualEffectPDDL.SourceFunc is LambdaExpression)
133+
{
134+
LambdaExpression lambdaExpression = ActualEffectPDDL.SourceFunc as LambdaExpression;
135+
if (lambdaExpression.Parameters.Count() == 1)
136+
index++;
137+
}
138+
}
139+
140+
128141
return _parameters[ActualObjectPDDL.Elements[index].AllParamsOfActClassPos.Value];
129142
}
130143
catch (ArgumentNullException)

SharpPDDL/PreconditionPDDL/PreconditionLambdaPDDL.cs

Lines changed: 45 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -54,49 +54,33 @@ protected override Expression VisitLambda<T>(Expression<T> node)
5454
{
5555
OldParameters = node.Parameters;
5656
_parameters = VisitAndConvert<ParameterExpression>(node.Parameters, "VisitLambda");
57+
List<ParameterExpression> parameters = _parameters.ToList<ParameterExpression>();
5758
int _parametersCount = _parameters.Count();
5859

59-
switch (_parameters.Count())
60+
//Up to make 1-Parameters lambda
61+
if (_parametersCount == 0)
6062
{
61-
case 0:
62-
GloCla.Tracer?.TraceEvent(TraceEventType.Warning, 118, GloCla.ResMan.GetString("W8"));
63-
64-
List<ParameterExpression> parameters0 = new List<ParameterExpression>();
65-
parameters0.Add(Expression.Parameter(typeof(ThumbnailObject), GloCla.EmptyName + "1"));
66-
parameters0.Add(Expression.Parameter(typeof(ThumbnailObject), GloCla.EmptyName + "2"));
67-
parameters0.Add(Expression.Parameter(typeof(ThumbnailObject), GloCla.EmptyName + "3"));
68-
_parameters = parameters0.AsReadOnly();
69-
70-
break;
71-
72-
//nake 3-Parameters lambda from 1-Param lambda
73-
case 1:
74-
List<ParameterExpression> parameters1 = _parameters.ToList<ParameterExpression>();
75-
parameters1.Add(Expression.Parameter(typeof(ThumbnailObject), GloCla.EmptyName + "2"));
76-
parameters1.Add(Expression.Parameter(typeof(ThumbnailObject), GloCla.EmptyName + "3"));
77-
_parameters = parameters1.AsReadOnly();
78-
79-
break;
80-
81-
//nake 3-Parameters lambda from 2-Param lambda
82-
case 2:
83-
List<ParameterExpression> parameters2 = _parameters.ToList<ParameterExpression>();
84-
parameters2.Add(Expression.Parameter(typeof(ThumbnailObject), GloCla.EmptyName + "3"));
85-
_parameters = parameters2.AsReadOnly();
86-
87-
break;
88-
89-
//do nothing it's max
90-
case 3:
91-
break;
92-
93-
//It's bad
94-
default:
95-
string ExceptionMess = String.Format(GloCla.ResMan.GetString("E33"));
96-
GloCla.Tracer?.TraceEvent(TraceEventType.Error, 119, ExceptionMess);
97-
throw new Exception(ExceptionMess);
63+
GloCla.Tracer?.TraceEvent(TraceEventType.Warning, 118, GloCla.ResMan.GetString("W8"));
64+
parameters.Add(Expression.Parameter(typeof(ThumbnailObject), GloCla.EmptyName + "1"));
9865
}
9966

67+
//Up to make 2-Parameters lambda
68+
if (_parametersCount < 2)
69+
parameters.Add(Expression.Parameter(typeof(ThumbnailObject), GloCla.EmptyName + "2"));
70+
71+
//Up to make 3-Parameters lambda
72+
if (_parametersCount < 3)
73+
parameters.Add(Expression.Parameter(typeof(ThumbnailObject), GloCla.EmptyName + "3"));
74+
75+
//To many Parameters. It's bad
76+
if (_parametersCount > 3)
77+
{
78+
string ExceptionMess = String.Format(GloCla.ResMan.GetString("E33"));
79+
GloCla.Tracer?.TraceEvent(TraceEventType.Error, 119, ExceptionMess);
80+
throw new Exception(ExceptionMess);
81+
}
82+
83+
_parameters = parameters.AsReadOnly();
10084
Expression PrecoLambdaBody = Visit(node.Body);
10185
ModifeidLambda = Expression.Lambda<Func<ThumbnailObject, ThumbnailObject, ThumbnailObject, bool>>(PrecoLambdaBody, _parameters);
10286

@@ -151,7 +135,7 @@ protected override Expression VisitMember(MemberExpression node)
151135
//intersect
152136
SingleTypeOfDomein ParameterModel = allTypes.Where(t => t.Type == node.Expression.Type).First();
153137

154-
if(ParameterModel is null)
138+
if (ParameterModel is null)
155139
{
156140
throw new Exception();
157141
}
@@ -187,13 +171,34 @@ protected override Expression VisitMember(MemberExpression node)
187171
Expression PrecursorAccessExpression = Expression.MakeMemberAccess(newParam, PrecursorPropertyInfo);
188172
IndexAccessExpr = Expression.MakeIndex(PrecursorAccessExpression, TO_indekser, argument);
189173
}
190-
174+
191175
//Convert above expression from ValueType to particular type of frontal value
192176
return Expression.Convert(IndexAccessExpr, node.Type);
193177
}
194178

195179
protected override Expression VisitMethodCall(MethodCallExpression node)
196180
{
181+
if (node.Method.IsStatic)
182+
{
183+
string MethodName = node.Method.Name;
184+
185+
if (!node.Arguments.Any())
186+
{
187+
string WarningArgMess = String.Format(GloCla.ResMan.GetString("W17"), MethodName);
188+
GloCla.Tracer?.TraceEvent(TraceEventType.Warning, 148, WarningArgMess);
189+
}
190+
191+
if (node.Method.ReturnType == typeof(void))
192+
{
193+
string WarningRetMess = String.Format(GloCla.ResMan.GetString("W18"), MethodName);
194+
GloCla.Tracer?.TraceEvent(TraceEventType.Warning, 149, WarningRetMess);
195+
}
196+
197+
ReadOnlyCollection<Expression> ChangedArguments = Visit(node.Arguments);
198+
MethodCallExpression ChangedMethod = Expression.Call(node.Method, ChangedArguments);
199+
return ChangedMethod;
200+
}
201+
197202
string ExceptionMess = String.Format(GloCla.ResMan.GetString("C39"), node.ToString());
198203
GloCla.Tracer?.TraceEvent(TraceEventType.Critical, 121, ExceptionMess);
199204
throw new Exception(ExceptionMess);

SharpPDDL/Properties/Resources.Designer.cs

Lines changed: 36 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

SharpPDDL/Properties/Resources.resx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -697,10 +697,26 @@
697697
<value>Expectations for {1}-type object inside {0} the goal was defined previously. Redefinition / add new ones is ignored.</value>
698698
<comment>GoalPDDL; ;0-goal name, 1-repeated object's type</comment>
699699
</data>
700+
<data name="W17" xml:space="preserve">
701+
<value />
702+
<comment>PreconditionLambdaPDDL;</comment>
703+
</data>
704+
<data name="W18" xml:space="preserve">
705+
<value />
706+
<comment>PreconditionLambdaPDDL;</comment>
707+
</data>
708+
<data name="W19" xml:space="preserve">
709+
<value />
710+
<comment>EffectLambdaPDDL;</comment>
711+
</data>
700712
<data name="W2" xml:space="preserve">
701713
<value>One of actions have no declared execution. SharpPDDL is trying realize plan without this action</value>
702714
<comment>PlanImplementor;</comment>
703715
</data>
716+
<data name="W20" xml:space="preserve">
717+
<value />
718+
<comment>EffectLambdaPDDL;</comment>
719+
</data>
704720
<data name="W3" xml:space="preserve">
705721
<value>Added part of action sententia is empty.</value>
706722
<comment>ActionPDDL;</comment>

SharpPDDL/SharpPDDL.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<Authors>Arkadiusz Bomba</Authors>
1111
<PackageReleaseNotes></PackageReleaseNotes>
1212
<RepositoryUrl>https://github.com/ArBom/SharpPDDL.git</RepositoryUrl>
13-
<Version>0.3.1.3</Version>
13+
<Version>0.3.1.4</Version>
1414
<PackageTags>GOAP;planning;AI;IIoT</PackageTags>
1515
<SignAssembly>false</SignAssembly>
1616
<DelaySign>false</DelaySign>
@@ -22,8 +22,8 @@
2222
<PackageReadmeFile>README.md</PackageReadmeFile>
2323
<PackageProjectUrl>https://github.com/ArBom/SharpPDDL</PackageProjectUrl>
2424
<NeutralLanguage></NeutralLanguage>
25-
<AssemblyVersion>0.3.1.3</AssemblyVersion>
26-
<FileVersion>0.3.1.3</FileVersion>
25+
<AssemblyVersion>0.3.1.4</AssemblyVersion>
26+
<FileVersion>0.3.1.4</FileVersion>
2727
</PropertyGroup>
2828

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

0 commit comments

Comments
 (0)