My favorites | Sign in
Project Home Downloads Wiki Source
Repository:
Checkout   Browse   Changes   Clones    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# Reset parameter resets the engine each time it's loaded.
script --reset ruby {

class Jug
attr_reader :capacity
attr_accessor :contents
attr_accessor :contents_wme
def initialize(capacity)
@capacity = capacity
@contents = 0
@contents_wme = nil
end
end

class Waterjugs

def initialize()
$soar.on_init_soar {|e| init e}
$soar.on_input {|e| on_input e}
$soar.on_output_command("pour") {|e| pour e}
$soar.on_output_command("fill") {|e| fill e}
$soar.on_output_command("empty"){|e| empty e}

init(nil)
end

def init(e)
@moves = 0
@jugs = {
"a" => Jug.new(5),
"b" => Jug.new(3)
}
end

def on_input(e)
@jugs.each do |name,jug|
if jug.contents_wme
jug.contents_wme = $soar.wmes.update(jug.contents_wme, jug.contents)
else
id = $soar.wmes.new_id("J")
$soar.wmes.add("jug", id)
$soar.wmes.add(id, "name", name)
$soar.wmes.add(id, "capacity", jug.capacity)
jug.contents_wme = $soar.wmes.add(id, "contents", jug.contents)
end
end

if @jugs["b"].contents == 2
$soar.print("\nenv: Achieved goal in #{@moves} moves!")
$soar.agent.stop()
end
end

def pour(e)
fr = @jugs[e["from"]]
to = @jugs[e["to"]]

$soar.print("\nenv: Pouring from #{e["from"]} to #{e["to"]}")

space = to.capacity - to.contents
amount = [space, fr.contents].min
to.contents += amount
fr.contents -= amount

@moves += 1
end

def fill(e)
jug = @jugs[e["jug"]]
jug.contents = jug.capacity

$soar.print("\nenv: Filling #{e["jug"]} to #{jug.capacity}")

@moves += 1
end

def empty(e)
jug = @jugs[e["jug"]]
jug.contents = 0

$soar.print("\nenv: Emptying #{e["jug"]}")

@moves += 1
end
end

waterjugs = Waterjugs.new()

}

source waterjugs-script.soar

Change log

7d5537ef23fb by Dave Ray <daveray> on Aug 25, 2010   Diff
Move script demos into sub-dir.

--HG--
rename : jsoar-demos/demos/waterjugs-
js.soar => jsoar-demos/demos/scripting
/waterjugs-js.soar
rename : jsoar-demos/demos/waterjugs-
py.soar => jsoar-demos/demos/scripting
/waterjugs-py.soar
rename : jsoar-demos/demos/waterjugs-
rb.soar => jsoar-demos/demos/scripting
/waterjugs-rb.soar
...
Go to: 
Project members, sign in to write a code review

Older revisions

bf9266539e1a by Dave Ray <daveray> on Aug 25, 2010   Diff
Updated demos to use --reset.
7bdca1e894ef by Dave Ray <daveray> on Aug 24, 2010   Diff
ruby waterjugs.
All revisions of this file

File info

Size: 1954 bytes, 92 lines
Powered by Google Project Hosting