diff --git a/pa-e1-sh/ipc-2002_depots-strips-automatic_4.env b/pa-e1-sh/ipc-2002_depots-strips-automatic_4.env new file mode 100644 index 000000000..642da4615 --- /dev/null +++ b/pa-e1-sh/ipc-2002_depots-strips-automatic_4.env @@ -0,0 +1,38 @@ +command: +- timeout +- -m=8000000 +- -t=900 +- python3 +- /home/pluehne/Documents/ASP/plasp-javier/encodings/planner/runplanner.py +- --domain=/home/pluehne/Documents/ASP/pddl-instances/ipc-2002/domains/depots-strips-automatic/domain.pddl +- /home/pluehne/Documents/ASP/pddl-instances/ipc-2002/domains/depots-strips-automatic/instances/instance-4.pddl +- --stats +- --verbose +- --print-call +- -A 16 +- --parallel=1 +- --shallow +configuration: + id: pa-e1-sh + instanceSets: + - lnpmr-easy-instances + options: + - --stats + - --verbose + - --print-call + - -A 16 + - --parallel=1 + - --shallow +exitCode: 0 +instance: + domain: depots-strips-automatic + instance: 4 + ipc: ipc-2002 +versions: + clingo: 5.2.2 + fastDownward: 10997:847cdf0069cab0c8841a9958e783d1a7340fe2e9 (2017-11-02 15:10 +0100) + planner: 517f2c0422a36582df17ecebb08e879b170cdfe2 (2017-11-21 02:23:06 +0100) + plasp: 3.1.0 + python: 3.6.3 +workingDirectory: /home/pluehne/Documents/ASP/plasp-javier/encodings/planner + diff --git a/pa-e1-sh/ipc-2002_depots-strips-automatic_4.err b/pa-e1-sh/ipc-2002_depots-strips-automatic_4.err new file mode 100644 index 000000000..c0e0c1f7b --- /dev/null +++ b/pa-e1-sh/ipc-2002_depots-strips-automatic_4.err @@ -0,0 +1,33 @@ +# configuration: {'id': 'pa-e1-sh', 'options': ['--stats', '--verbose', '--print-call', '-A 16', '--parallel=1', '--shallow'], 'instanceSets': ['lnpmr-easy-instances']} +# instance: {'ipc': 'ipc-2002', 'domain': 'depots-strips-automatic', 'instance': 4} +# command: ['timeout', '-m=8000000', '-t=900', 'python3', '/home/pluehne/Documents/ASP/plasp-javier/encodings/planner/runplanner.py', '--domain=/home/pluehne/Documents/ASP/pddl-instances/ipc-2002/domains/depots-strips-automatic/domain.pddl', '/home/pluehne/Documents/ASP/pddl-instances/ipc-2002/domains/depots-strips-automatic/instances/instance-4.pddl', '--stats', '--verbose', '--print-call', '-A 16', '--parallel=1', '--shallow'] +# working directory: /home/pluehne/Documents/ASP/plasp-javier/encodings/planner +# exit code: 0 +/home/pluehne/Documents/ASP/plasp-javier/encodings/strips/preprocess.lp:13:4-34: info: atom does not occur in any rule head: + requires(feature(actionCosts)) + +/home/pluehne/Documents/ASP/plasp-javier/encodings/strips/preprocess.lp:14:4-33: info: atom does not occur in any rule head: + requires(feature(axiomRules)) + +/home/pluehne/Documents/ASP/plasp-javier/encodings/strips/preprocess.lp:15:4-41: info: atom does not occur in any rule head: + requires(feature(conditionalEffects)) + +/home/pluehne/Documents/ASP/plasp-javier/encodings/strips/strips-incremental.lp:66:15-28: info: atom does not occur in any rule head: + mutexGroup(G) + +/home/pluehne/Documents/ASP/plasp-javier/encodings/strips/strips-incremental.lp:66:30-45: info: atom does not occur in any rule head: + contains(G,X,V) + +/home/pluehne/Documents/ASP/plasp-javier/encodings/strips/strips-incremental.lp:67:15-28: info: atom does not occur in any rule head: + mutexGroup(G) + +/home/pluehne/Documents/ASP/plasp-javier/encodings/strips/strips-incremental.lp:74:41-56: info: atom does not occur in any rule head: + contains(G,X,V) + +/home/pluehne/Documents/ASP/plasp-javier/encodings/strips/strips-incremental.lp:84:41-56: info: atom does not occur in any rule head: + contains(G,X,V) + +# planner call: plasp-3.1.0 translate --parsing-mode=compatibility /home/pluehne/Documents/ASP/pddl-instances/ipc-2002/domains/depots-strips-automatic/domain.pddl /home/pluehne/Documents/ASP/pddl-instances/ipc-2002/domains/depots-strips-automatic/instances/instance-4.pddl | /home/pluehne/Documents/ASP/plasp-javier/encodings/planner/planner.py - /home/pluehne/Documents/ASP/plasp-javier/encodings/strips/preprocess.lp /home/pluehne/Documents/ASP/plasp-javier/encodings/strips/strips-incremental.lp --stats --verbose -A 16 --query-at-last --check-at-last --forbid-actions --force-actions -c planner_on=1 -c _shallow=1 -c _closure=3 -c _parallel=1 +FINISHED CPU 69.81 MEM 30288 MAXMEM 355388 STALE 1 MAXMEM_RSS 278244 + + diff --git a/pa-e1-sh/ipc-2002_depots-strips-automatic_4.out b/pa-e1-sh/ipc-2002_depots-strips-automatic_4.out new file mode 100644 index 000000000..713a9e65a --- /dev/null +++ b/pa-e1-sh/ipc-2002_depots-strips-automatic_4.out @@ -0,0 +1,312 @@ +planner.py version 0.0.1 + +Time: 0.20s +Memory: 63MB + +Iteration 1 +Queue: [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75] +Grounded Until: 0 +Solving... +Solving Time: 0.00s +Memory: 63MB (+0MB) +UNSAT +Iteration Time: 0.00s + +Iteration 2 +Queue: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80] +Grounded Until: 0 +Grounding... [('step', [1]), ('step', [2]), ('step', [3]), ('step', [4]), ('step', [5]), ('check', [5])] +Grounding Time: 0.16s +Memory: 71MB (+8MB) +Unblocking actions... +Solving... +Solving Time: 0.01s +Memory: 75MB (+4MB) +UNSAT +Iteration Time: 0.21s + +Iteration 3 +Queue: [10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85] +Grounded Until: 5 +Grounding... [('step', [6]), ('step', [7]), ('step', [8]), ('step', [9]), ('step', [10]), ('check', [10])] +Grounding Time: 0.16s +Memory: 80MB (+5MB) +Unblocking actions... +Solving... +Solving Time: 0.08s +Memory: 84MB (+4MB) +UNSAT +Iteration Time: 0.28s + +Iteration 4 +Queue: [15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90] +Grounded Until: 10 +Grounding... [('step', [11]), ('step', [12]), ('step', [13]), ('step', [14]), ('step', [15]), ('check', [15])] +Grounding Time: 0.16s +Memory: 88MB (+4MB) +Unblocking actions... +Solving... +Solving Time: 1.95s +Memory: 93MB (+5MB) +UNKNOWN +Iteration Time: 2.16s + +Iteration 5 +Queue: [20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 15] +Grounded Until: 15 +Grounding... [('step', [16]), ('step', [17]), ('step', [18]), ('step', [19]), ('step', [20]), ('check', [20])] +Grounding Time: 0.20s +Memory: 103MB (+10MB) +Unblocking actions... +Solving... +Solving Time: 2.13s +Memory: 108MB (+5MB) +UNKNOWN +Iteration Time: 2.39s + +Iteration 6 +Queue: [25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 15, 20] +Grounded Until: 20 +Grounding... [('step', [21]), ('step', [22]), ('step', [23]), ('step', [24]), ('step', [25]), ('check', [25])] +Grounding Time: 0.16s +Memory: 114MB (+6MB) +Unblocking actions... +Solving... +Solving Time: 2.40s +Memory: 122MB (+8MB) +UNKNOWN +Iteration Time: 2.62s + +Iteration 7 +Queue: [30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 15, 20, 25] +Grounded Until: 25 +Grounding... [('step', [26]), ('step', [27]), ('step', [28]), ('step', [29]), ('step', [30]), ('check', [30])] +Grounding Time: 0.16s +Memory: 126MB (+4MB) +Unblocking actions... +Solving... +Solving Time: 2.39s +Memory: 131MB (+5MB) +UNKNOWN +Iteration Time: 2.62s + +Iteration 8 +Queue: [35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 15, 20, 25, 30] +Grounded Until: 30 +Grounding... [('step', [31]), ('step', [32]), ('step', [33]), ('step', [34]), ('step', [35]), ('check', [35])] +Grounding Time: 0.16s +Memory: 135MB (+4MB) +Unblocking actions... +Solving... +Solving Time: 2.65s +Memory: 147MB (+12MB) +UNKNOWN +Iteration Time: 2.90s + +Iteration 9 +Queue: [40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 15, 20, 25, 30, 35] +Grounded Until: 35 +Grounding... [('step', [36]), ('step', [37]), ('step', [38]), ('step', [39]), ('step', [40]), ('check', [40])] +Grounding Time: 0.17s +Memory: 148MB (+1MB) +Unblocking actions... +Solving... +Solving Time: 3.11s +Memory: 154MB (+6MB) +UNKNOWN +Iteration Time: 3.36s + +Iteration 10 +Queue: [45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 15, 20, 25, 30, 35, 40] +Grounded Until: 40 +Grounding... [('step', [41]), ('step', [42]), ('step', [43]), ('step', [44]), ('step', [45]), ('check', [45])] +Grounding Time: 0.17s +Memory: 162MB (+8MB) +Unblocking actions... +Solving... +Solving Time: 3.74s +Memory: 168MB (+6MB) +UNKNOWN +Iteration Time: 4.01s + +Iteration 11 +Queue: [50, 55, 60, 65, 70, 75, 80, 85, 90, 15, 20, 25, 30, 35, 40, 45] +Grounded Until: 45 +Grounding... [('step', [46]), ('step', [47]), ('step', [48]), ('step', [49]), ('step', [50]), ('check', [50])] +Grounding Time: 0.17s +Memory: 174MB (+6MB) +Unblocking actions... +Solving... +Solving Time: 3.52s +Memory: 188MB (+14MB) +UNKNOWN +Iteration Time: 3.79s + +Iteration 12 +Queue: [55, 60, 65, 70, 75, 80, 85, 90, 15, 20, 25, 30, 35, 40, 45, 50] +Grounded Until: 50 +Grounding... [('step', [51]), ('step', [52]), ('step', [53]), ('step', [54]), ('step', [55]), ('check', [55])] +Grounding Time: 0.24s +Memory: 195MB (+7MB) +Unblocking actions... +Solving... +Solving Time: 4.17s +Memory: 201MB (+6MB) +UNKNOWN +Iteration Time: 4.51s + +Iteration 13 +Queue: [60, 65, 70, 75, 80, 85, 90, 15, 20, 25, 30, 35, 40, 45, 50, 55] +Grounded Until: 55 +Grounding... [('step', [56]), ('step', [57]), ('step', [58]), ('step', [59]), ('step', [60]), ('check', [60])] +Grounding Time: 0.16s +Memory: 206MB (+5MB) +Unblocking actions... +Solving... +Solving Time: 4.53s +Memory: 213MB (+7MB) +UNKNOWN +Iteration Time: 4.80s + +Iteration 14 +Queue: [65, 70, 75, 80, 85, 90, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60] +Grounded Until: 60 +Grounding... [('step', [61]), ('step', [62]), ('step', [63]), ('step', [64]), ('step', [65]), ('check', [65])] +Grounding Time: 0.17s +Memory: 218MB (+5MB) +Unblocking actions... +Solving... +Solving Time: 4.25s +Memory: 227MB (+9MB) +UNKNOWN +Iteration Time: 4.53s + +Iteration 15 +Queue: [70, 75, 80, 85, 90, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65] +Grounded Until: 65 +Grounding... [('step', [66]), ('step', [67]), ('step', [68]), ('step', [69]), ('step', [70]), ('check', [70])] +Grounding Time: 0.17s +Memory: 231MB (+4MB) +Unblocking actions... +Solving... +Solving Time: 3.92s +Memory: 238MB (+7MB) +UNKNOWN +Iteration Time: 4.21s + +Iteration 16 +Queue: [75, 80, 85, 90, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70] +Grounded Until: 70 +Grounding... [('step', [71]), ('step', [72]), ('step', [73]), ('step', [74]), ('step', [75]), ('check', [75])] +Grounding Time: 0.17s +Memory: 240MB (+2MB) +Unblocking actions... +Solving... +Solving Time: 4.13s +Memory: 260MB (+20MB) +UNKNOWN +Iteration Time: 4.42s + +Iteration 17 +Queue: [80, 85, 90, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75] +Grounded Until: 75 +Grounding... [('step', [76]), ('step', [77]), ('step', [78]), ('step', [79]), ('step', [80]), ('check', [80])] +Grounding Time: 0.17s +Memory: 260MB (+0MB) +Unblocking actions... +Solving... +Solving Time: 4.32s +Memory: 266MB (+6MB) +UNKNOWN +Iteration Time: 4.62s + +Iteration 18 +Queue: [85, 90, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80] +Grounded Until: 80 +Grounding... [('step', [81]), ('step', [82]), ('step', [83]), ('step', [84]), ('step', [85]), ('check', [85])] +Grounding Time: 0.17s +Memory: 266MB (+0MB) +Unblocking actions... +Solving... +Solving Time: 3.89s +Memory: 275MB (+9MB) +UNKNOWN +Iteration Time: 4.20s + +Iteration 19 +Queue: [90, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85] +Grounded Until: 85 +Grounding... [('step', [86]), ('step', [87]), ('step', [88]), ('step', [89]), ('step', [90]), ('check', [90])] +Grounding Time: 0.17s +Memory: 276MB (+1MB) +Unblocking actions... +Solving... +Solving Time: 4.22s +Memory: 285MB (+9MB) +UNKNOWN +Iteration Time: 4.53s + +Iteration 20 +Queue: [15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90] +Grounded Until: 90 +Blocking actions... +Solving... +Solving Time: 3.03s +Memory: 285MB (+0MB) +UNKNOWN +Iteration Time: 3.05s + +Iteration 21 +Queue: [20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 15] +Grounded Until: 90 +Unblocking actions... +Solving... +Solving Time: 2.95s +Memory: 285MB (+0MB) +UNKNOWN +Iteration Time: 2.97s + +Iteration 22 +Queue: [25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 15, 20] +Grounded Until: 90 +Unblocking actions... +Solving... +Answer: 1 +occurs(action(("lift",constant("hoist0"),constant("crate7"),constant("crate4"),constant("depot0"))),1) occurs(action(("lift",constant("hoist1"),constant("crate2"),constant("pallet1"),constant("distributor0"))),1) occurs(action(("drive",constant("truck1"),constant("distributor1"),constant("distributor0"))),1) occurs(action(("drive",constant("truck0"),constant("distributor1"),constant("depot0"))),1) occurs(action(("lift",constant("hoist2"),constant("crate6"),constant("crate5"),constant("distributor1"))),1) occurs(action(("load",constant("hoist0"),constant("crate7"),constant("truck0"),constant("depot0"))),2) occurs(action(("load",constant("hoist1"),constant("crate2"),constant("truck1"),constant("distributor0"))),2) occurs(action(("lift",constant("hoist0"),constant("crate4"),constant("crate1"),constant("depot0"))),3) occurs(action(("drive",constant("truck1"),constant("distributor0"),constant("distributor1"))),3) occurs(action(("load",constant("hoist2"),constant("crate6"),constant("truck1"),constant("distributor1"))),4) occurs(action(("load",constant("hoist0"),constant("crate4"),constant("truck0"),constant("depot0"))),4) occurs(action(("drive",constant("truck1"),constant("distributor1"),constant("depot0"))),5) occurs(action(("lift",constant("hoist0"),constant("crate1"),constant("crate0"),constant("depot0"))),5) occurs(action(("lift",constant("hoist2"),constant("crate5"),constant("crate3"),constant("distributor1"))),6) occurs(action(("load",constant("hoist0"),constant("crate1"),constant("truck0"),constant("depot0"))),6) occurs(action(("drive",constant("truck1"),constant("depot0"),constant("distributor1"))),6) occurs(action(("lift",constant("hoist0"),constant("crate0"),constant("pallet0"),constant("depot0"))),7) occurs(action(("load",constant("hoist2"),constant("crate5"),constant("truck1"),constant("distributor1"))),7) occurs(action(("lift",constant("hoist2"),constant("crate3"),constant("pallet2"),constant("distributor1"))),8) occurs(action(("drive",constant("truck1"),constant("distributor1"),constant("distributor0"))),8) occurs(action(("load",constant("hoist0"),constant("crate0"),constant("truck0"),constant("depot0"))),8) occurs(action(("unload",constant("hoist0"),constant("crate7"),constant("truck0"),constant("depot0"))),9) occurs(action(("unload",constant("hoist1"),constant("crate6"),constant("truck1"),constant("distributor0"))),9) occurs(action(("drop",constant("hoist2"),constant("crate3"),constant("pallet2"),constant("distributor1"))),9) occurs(action(("drop",constant("hoist1"),constant("crate6"),constant("pallet1"),constant("distributor0"))),10) occurs(action(("drive",constant("truck1"),constant("distributor0"),constant("depot0"))),10) occurs(action(("drop",constant("hoist0"),constant("crate7"),constant("pallet0"),constant("depot0"))),11) occurs(action(("drive",constant("truck1"),constant("depot0"),constant("distributor1"))),11) occurs(action(("lift",constant("hoist1"),constant("crate6"),constant("pallet1"),constant("distributor0"))),12) occurs(action(("unload",constant("hoist2"),constant("crate5"),constant("truck1"),constant("distributor1"))),12) occurs(action(("lift",constant("hoist0"),constant("crate7"),constant("pallet0"),constant("depot0"))),13) occurs(action(("load",constant("hoist0"),constant("crate7"),constant("truck0"),constant("depot0"))),14) occurs(action(("load",constant("hoist2"),constant("crate5"),constant("truck1"),constant("distributor1"))),15) occurs(action(("drop",constant("hoist1"),constant("crate6"),constant("pallet1"),constant("distributor0"))),16) occurs(action(("unload",constant("hoist0"),constant("crate7"),constant("truck0"),constant("depot0"))),16) occurs(action(("lift",constant("hoist2"),constant("crate3"),constant("pallet2"),constant("distributor1"))),16) occurs(action(("drop",constant("hoist0"),constant("crate7"),constant("pallet0"),constant("depot0"))),17) occurs(action(("lift",constant("hoist1"),constant("crate6"),constant("pallet1"),constant("distributor0"))),17) occurs(action(("drive",constant("truck0"),constant("depot0"),constant("distributor0"))),17) occurs(action(("load",constant("hoist2"),constant("crate3"),constant("truck1"),constant("distributor1"))),17) occurs(action(("drop",constant("hoist1"),constant("crate6"),constant("pallet1"),constant("distributor0"))),18) occurs(action(("unload",constant("hoist2"),constant("crate5"),constant("truck1"),constant("distributor1"))),18) occurs(action(("drive",constant("truck0"),constant("distributor0"),constant("depot0"))),18) occurs(action(("drop",constant("hoist2"),constant("crate5"),constant("pallet2"),constant("distributor1"))),19) occurs(action(("lift",constant("hoist1"),constant("crate6"),constant("pallet1"),constant("distributor0"))),19) occurs(action(("unload",constant("hoist0"),constant("crate4"),constant("truck0"),constant("depot0"))),19) occurs(action(("drive",constant("truck1"),constant("distributor1"),constant("depot0"))),19) occurs(action(("drop",constant("hoist1"),constant("crate6"),constant("pallet1"),constant("distributor0"))),20) occurs(action(("drive",constant("truck1"),constant("depot0"),constant("distributor0"))),20) occurs(action(("drive",constant("truck0"),constant("depot0"),constant("distributor1"))),20) occurs(action(("unload",constant("hoist1"),constant("crate2"),constant("truck1"),constant("distributor0"))),21) occurs(action(("unload",constant("hoist2"),constant("crate1"),constant("truck0"),constant("distributor1"))),21) occurs(action(("drop",constant("hoist2"),constant("crate1"),constant("crate5"),constant("distributor1"))),22) occurs(action(("drive",constant("truck1"),constant("distributor0"),constant("distributor1"))),22) occurs(action(("drop",constant("hoist0"),constant("crate4"),constant("crate7"),constant("depot0"))),23) occurs(action(("drop",constant("hoist1"),constant("crate2"),constant("crate6"),constant("distributor0"))),23) occurs(action(("drive",constant("truck1"),constant("distributor1"),constant("distributor0"))),23) occurs(action(("drive",constant("truck0"),constant("distributor1"),constant("depot0"))),23) occurs(action(("lift",constant("hoist2"),constant("crate1"),constant("crate5"),constant("distributor1"))),23) occurs(action(("unload",constant("hoist0"),constant("crate0"),constant("truck0"),constant("depot0"))),24) occurs(action(("unload",constant("hoist1"),constant("crate3"),constant("truck1"),constant("distributor0"))),24) occurs(action(("drop",constant("hoist0"),constant("crate0"),constant("crate4"),constant("depot0"))),25) occurs(action(("drop",constant("hoist2"),constant("crate1"),constant("crate5"),constant("distributor1"))),25) occurs(action(("drive",constant("truck0"),constant("depot0"),constant("distributor1"))),25) occurs(action(("drive",constant("truck1"),constant("distributor0"),constant("distributor1"))),25) +Solving Time: 2.65s +Memory: 285MB (+0MB) +SAT +SATISFIABLE + +Models : 1+ +Calls : 22 +Time : 69.022s (Solving: 63.50s 1st Model: 2.62s Unsat: 0.07s) +CPU Time : 69.040s + +Choices : 2420566 +Conflicts : 199362 (Analyzed: 199360) +Restarts : 1885 (Average: 105.76 Last: 178) +Model-Level : 501.0 +Problems : 22 (Average Length: 53.14 Splits: 0) +Lemmas : 199360 (Deleted: 162528) + Binary : 5768 (Ratio: 2.89%) + Ternary : 7063 (Ratio: 3.54%) + Conflict : 199360 (Average Length: 87.7 Ratio: 100.00%) + Loop : 0 (Average Length: 0.0 Ratio: 0.00%) + Other : 0 (Average Length: 0.0 Ratio: 0.00%) +Backjumps : 199360 (Average: 8.69 Max: 3129 Sum: 1732896) + Executed : 199037 (Average: 8.64 Max: 3129 Sum: 1721475 Ratio: 99.34%) + Bounded : 323 (Average: 35.36 Max: 92 Sum: 11421 Ratio: 0.66%) + +Rules : 57567 +Atoms : 57567 +Bodies : 1 (Original: 0) +Tight : Yes +Variables : 260111 (Eliminated: 0 Frozen: 52372) +Constraints : 1392272 (Binary: 86.8% Ternary: 9.5% Other: 3.7%) + +Memory Peak : 312MB +Max. Length : 90 steps +Sol. Length : 25 steps + +