0

我试图运行这段代码:

#!/usr/bin/env python
"""
The example presented at the MURI review, illustrating the use of
jtlvint and automaton modules

Nok Wongpiromsarn (nok@cds.caltech.edu)
August 3, 2010

minor refactoring by SCL <slivingston@caltech.edu>
1 May 2011.

Small modifications by Yuchen Lin.
12 Aug 2011
"""

#@import_section@
import sys, os
from subprocess import call

from tulip import *
import tulip.polytope as pc
#@import_section_end@


# Specify where the smv file, spc file and aut file will go
#@filename_section@
testfile = 'robot_discrete_simple'
path = os.path.abspath(os.path.dirname(sys.argv[0]))
smvfile = os.path.join(path, 'specs', testfile+'.smv')
spcfile = os.path.join(path, 'specs', testfile+'.spc')
autfile = os.path.join(path, 'specs', testfile+'.aut')
#@filename_section_end@

# Specify the environment variables
#@envvar_section@
env_vars = {'park' : 'boolean'}
#@envvar_section_end@

# Specify the discrete system variable
# Introduce a boolean variable X0reach to handle the spec [](park -> <>X0)
# X0reach starts with TRUE. 
# [](next(X0reach) = X0 | (X0reach & !park))
#@sysdiscvar_section@
sys_disc_vars = {'X0reach' : 'boolean'}
#@sysdiscvar_section_end@

# Specify the transition system representing the continuous dynamics
#@ts_section@
disc_dynamics = prop2part.PropPreservingPartition(list_region=[], list_prop_symbol=[])

# These following propositions specify in which cell the robot is,
# i.e., Xi means that the robot is in cell Ci
disc_dynamics.list_prop_symbol = ['X0', 'X1', 'X2', 'X3', 'X4', 'X5'] 
disc_dynamics.num_prop = len(disc_dynamics.list_prop_symbol)

# Regions. Note that the first argument of Region(poly, prop) should
# be a list of polytopes. But since we are not dealing with the actual
# controller, we will just fill it with a string (think of it as a
# name of the region).  The second argument of Region(poly, prop) is a
# list that specifies which propositions in cont_props above is
# satisfied. As specified below, regioni satisfies proposition Xi.
region0 = pc.Region('C0', [1, 0, 0, 0, 0, 0])
region1 = pc.Region('C1', [0, 1, 0, 0, 0, 0])
region2 = pc.Region('C2', [0, 0, 1, 0, 0, 0])
region3 = pc.Region('C3', [0, 0, 0, 1, 0, 0])
region4 = pc.Region('C4', [0, 0, 0, 0, 1, 0])
region5 = pc.Region('C5', [0, 0, 0, 0, 0, 1])
disc_dynamics.list_region = [region0, region1, region2, region3, region4, region5]
disc_dynamics.num_regions = len(disc_dynamics.list_region)

# The transition relation between regions. disc_dynamics.trans[i][j] =
# 1 if starting from region j, the robot can move to region i while
# only staying in the union of region i and region j.
disc_dynamics.trans =   [[1, 1, 0, 1, 0, 0], \
                         [1, 1, 1, 0, 1, 0], \
                         [0, 1, 1, 0, 0, 1], \
                         [1, 0, 0, 1, 1, 0], \
                         [0, 1, 0, 1, 1, 1], \
                         [0, 0, 1, 0, 1, 1]]
#@ts_section_end@

#@specification@
assumption = 'X0reach & []<>(!park)'
guarantee = '[]<>X5 & []<>(X0reach)'
guarantee += ' & [](next(X0reach) = (X0 | (X0reach & !park)))'
#@specification_end@

# Generate input to JTLV
#@geninput@
prob = jtlvint.generateJTLVInput(env_vars, sys_disc_vars, [assumption, guarantee],
                                 {}, disc_dynamics, smvfile, spcfile, verbose=2)
#@geninput_end@

# Check realizability
#@check@
realizability = jtlvint.checkRealizability(smv_file=smvfile, spc_file=spcfile,
                                           aut_file=autfile, verbose=3)
#@check_end@

# Compute an automaton
#@compaut@
jtlvint.computeStrategy(smv_file=smvfile, spc_file=spcfile, aut_file=autfile,
                        priority_kind=3, verbose=3)
aut = automaton.Automaton(autfile, [], 3)

# Remove dead-end states from automaton.
aut.trimDeadStates()
#@compaut_end@


# Visualize automaton with DOT file

# This example uses environment vs. system turn distinction.  To
# disable it, just use (the default),
if not aut.writeDotFile(fname="rdsimple_example.dot", hideZeros=True):
# if not aut.writeDotFile("rdsimple_example.dot",
#                         distinguishTurns={"env": prob.getEnvVars().keys(),
#                                           "sys": prob.getSysVars().keys()},
#                         turnOrder=("env", "sys")):
# if not aut.writeDotFileEdged(fname="rdsimple_example.dot",
#                              env_vars = prob.getEnvVars().keys(),
#                              sys_vars = prob.getSysVars().keys(),
#                              hideZeros=True):
    print "Error occurred while generating DOT file."
else:
    try:
        call("dot rdsimple_example.dot -Tpng -o rdsimple_example.png".split())
    except:
        print "Failed to create image from DOT file. To do so, try\n\ndot rdsimple_example.dot -Tpng -o rdsimple_example.png\n"


# Simulate.
#@sim@
num_it = 30
env_states = [{'X0reach': True}]
for i in range(1, num_it):
    if (i%3 == 0):
        env_states.append({'park':True})
    else:
        env_states.append({'park':False})

graph_vis = raw_input
destfile = 'rdsimple_example.gexf'
label_vars = ['park', 'cellID', 'X0reach']
delay = 2
vis_depth = 3
aut_states = grsim.grsim([aut], aut_trans_dict={}, env_states=env_states,
                         num_it=num_it, deterministic_env=False,
                         graph_vis=graph_vis, destfile=destfile,
                         label_vars=label_vars, delay=delay,
                         vis_depth=vis_depth)
#@sim_end@

然而,就在它结束之前,它在#simulate 处失败,它说:

Traceback (most recent call last):
  File "/Applications/Python 2.7/tulip-0.3c/examples/robot_discrete_simple.py", line 151, in <module>
    vis_depth=vis_depth)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/tulip/grsim.py", line 109, in grsim
    raise TypeError("Invalid arguments to grsim")
TypeError: Invalid arguments to grsim

不确定此信息是否有帮助,但 DOT 文件也无法创建..

Failed to create image from DOT file. To do so, try

dot rdsimple_example.dot -Tpng -o rdsimple_example.png

为什么给我一个 TypeError 问题?我怎样才能解决这个问题 ?

4

1 回答 1

1

以下代码grsim引发异常:

if not (isinstance(aut_list, list) and len(aut_list) > 0 and
        isinstance(aut_trans_dict, dict) and
        isinstance(env_states, list) and len(env_states) > 0 and
        isinstance(num_it, int) and isinstance(deterministic_env, bool) and
        isinstance(graph_vis, bool) and isinstance(destfile, str) and
        (label_vars == None or isinstance(label_vars, list)) and
        isinstance(delay, int) and isinstance(vis_depth, int)):
    raise TypeError("Invalid arguments to grsim")

您的graph_vis变量不是布尔值,而是raw_input函数

graph_vis = raw_input

你甚至不调用它。

documentation也要求一个布尔值:

grsim.grsim(aut_list, aut_trans_dict={}, env_states=[{}], num_it=20, deterministic_env=True, graph_vis=False, destfile='sim_graph.gexf', label_vars=None, delay=2, vis_depth=3)

[...]

  • graph_vis – 指定是否在 Gephi 中可视化模拟。
于 2012-10-19T16:08:55.450 回答