sfplanner 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  SFP Planner for Ruby
2
2
  ====================
3
3
  - Author: Herry (herry13@gmail.com)
4
- - Version: 0.1.1
5
- - License: [BSD License](https://github.com/herry13/sfp-ruby/blob/master/LICENSE)
4
+ - [Version](https://github.com/herry13/sfplanner/blob/master/VERSION)
5
+ - License: [BSD](https://github.com/herry13/sfp-ruby/blob/master/LICENSE)
6
6
 
7
7
  A Ruby gem that provides a Ruby API to SFP planner that solves a planning task written in [SFP language](https://github.com/herry13/nuri/wiki/SFP-language).
8
8
 
@@ -184,3 +184,21 @@ Example of Planning Task
184
184
  This workflow is sequential that has 3 procedures. If you executes
185
185
  the workflow in given order, it will achieves the goal state as well
186
186
  as perserves the global constraints during the execution.
187
+
188
+
189
+ Planner Options
190
+ ---------------
191
+ You could set particular environment variable to change the planner settings:
192
+ - to activate debug-mode
193
+
194
+ SFPLANNER_DEBUG=1
195
+
196
+ - to use multiple heuristic on finding the solution, and then pick the best result
197
+
198
+ SFPLANNER_MIXED_CONTINUE=1
199
+
200
+ - to set heuristics which are used in searching
201
+
202
+ SFPLANNER_MIXED_HEURISTICS=ff2,cea2
203
+
204
+
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.2
data/bin/sfplanner CHANGED
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- libdir = File.expand_path(File.dirname(__FILE__))
4
- require "#{libdir}/../lib/sfplanner"
3
+ dir = File.expand_path(File.dirname(__FILE__))
4
+ current_version = File.read(File.join(File.dirname(__FILE__), '../VERSION')).sub(/\n/, '')
5
+ require "#{dir}/../lib/sfplanner"
5
6
 
6
7
  opts = Trollop::options do
7
- version "sfplanner 0.1.1 (c) 2013 Herry"
8
+ version "sfplanner " + current_version + " (c) 2013 Herry"
8
9
  banner <<-EOS
9
10
  Solve a planning task specified in SFP language, and print the plan (if found) in JSON format.
10
11
 
@@ -1,7 +1,9 @@
1
+ require 'fileutils'
2
+
1
3
  module Sfp
2
4
  class Planner
3
5
  Heuristic = 'mixed' # lmcut, cg, cea, ff, mixed ([cg|cea|ff]=>lmcut)
4
- Debug = false
6
+ Debug = (ENV['SFPLANNER_DEBUG'] ? true : false)
5
7
  TranslatorBenchmarkFile = 'sas_translator.benchmarks'
6
8
 
7
9
  class Config
@@ -452,15 +454,20 @@ module Sfp
452
454
  # 2) remove actions which are not selected by previous step
453
455
  # 3) solve the problem with LMCUT using A*-search to obtain a sub-optimal plan
454
456
  class MixedHeuristic
455
- def initialize(dir, sas_file, plan_file)
457
+ attr_reader :heuristics_order
458
+
459
+ def initialize(dir, sas_file, plan_file, continue=false, optimize=true)
456
460
  @dir = dir
457
461
  @sas_file = sas_file
458
462
  @plan_file = plan_file
463
+ @heuristics_order = ['autotune12', 'autotune22', 'ff2', 'cea2']
464
+ @heuristics_order = ENV['SFPLANNER_MIXED_HEURISTICS'].split(',') if ENV['SFPLANNER_MIXED_HEURISTICS']
465
+ @continue = continue
466
+ @continue = true if ENV['SFPLANNER_MIXED_CONTINUE']
467
+ @optimize = optimize
459
468
  end
460
469
 
461
- def solve
462
- optimize = true
463
-
470
+ def solve2
464
471
  if not File.exist?(@plan_file)
465
472
  #autotune12 (see fd-autotune-1)
466
473
  planner = Sfp::Planner.getcommand(@dir, @sas_file, @plan_file, 'autotune12')
@@ -490,7 +497,36 @@ module Sfp
490
497
  #end
491
498
 
492
499
  return false if not File.exist?(@plan_file)
493
- optimize_plan if optimize
500
+ optimize_plan if @optimize
501
+
502
+ true
503
+ end
504
+
505
+ def solve
506
+ total = 0
507
+ @heuristics_order.each do |heuristic|
508
+ command = Sfp::Planner.getcommand(@dir, @sas_file, @plan_file, heuristic)
509
+ Kernel.system(command)
510
+ if File.exist?(@plan_file)
511
+ total += 1
512
+ File.rename(@plan_file, "#{@plan_file}.sol.#{total}")
513
+ break if not @continue
514
+ end
515
+ end
516
+
517
+ return false if total <= 0
518
+
519
+ best_length = 1000000
520
+ 1.upto(total) do |i|
521
+ filepath = "#{@plan_file}.sol.#{i}"
522
+ plan_length = File.read(filepath).split("\n").length
523
+ if plan_length < best_length
524
+ File.delete(@plan_file) if File.exist?(@plan_file)
525
+ FileUtils.copy(filepath, @plan_file)
526
+ end
527
+ end
528
+
529
+ optimize_plan if @optimize
494
530
 
495
531
  true
496
532
  end
data/sfplanner.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'sfplanner'
3
- s.version = '0.1.1'
3
+ s.version = File.read(File.join(File.dirname(__FILE__), 'VERSION')).sub(/\n/, '')
4
4
  s.date = '2013-08-13'
5
5
  s.summary = 'SFPlanner'
6
6
  s.description = 'A Ruby gem that provides a Ruby API and a script to the SFP planner. This planner can automatically generate a plan that solves a planning problem written in SFP language.'
@@ -16,5 +16,5 @@ Gem::Specification.new do |s|
16
16
  s.homepage = 'https://github.com/herry13/sfplanner'
17
17
  s.rubyforge_project = 'sfplanner'
18
18
 
19
- s.add_dependency 'sfp', '~> 0.3.6'
19
+ s.add_dependency 'sfp', '~> 0.3.11'
20
20
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sfplanner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,15 +13,15 @@ date: 2013-08-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sfp
16
- requirement: &21369160 !ruby/object:Gem::Requirement
16
+ requirement: &8735620 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 0.3.6
21
+ version: 0.3.11
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *21369160
24
+ version_requirements: *8735620
25
25
  description: A Ruby gem that provides a Ruby API and a script to the SFP planner.
26
26
  This planner can automatically generate a plan that solves a planning problem written
27
27
  in SFP language.
@@ -34,6 +34,7 @@ files:
34
34
  - .gitignore
35
35
  - LICENSE
36
36
  - README.md
37
+ - VERSION
37
38
  - bin/sfplanner
38
39
  - bin/sfw2graph
39
40
  - bin/solver/linux-x86/downward