Paper [IDETC]: Human Failure Representation

This paper covers the exploration and analysis of error producing conditions by a human operator in the rover model.

For the paper Irshad, L., & Hulse, D. (2022, August). Resilience modeling in complex engineered systems with human-machine interactions. In International Design Engineering Technical Conferences and Computers and Information in Engineering Conference (Vol. 86212, p. V002T02A024). American Society of Mechanical Engineers.

Copyright © 2024, United States Government, as represented by the Administrator of the National Aeronautics and Space Administration. All rights reserved.

The “"Fault Model Design tools - fmdtools version 2"” software is licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. 

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
from fmdtools_examples.navigating_rover.model_human import RoverHuman
from fmdtools_examples.navigating_rover.model_main import plot_map

import fmdtools.sim.propagate as prop
import fmdtools.analyze as an
from fmdtools.sim.sample import ParameterSample, ParameterDomain, FaultSample, FaultDomain

import numpy as np
import matplotlib.pyplot as plt

Visualizing Rover Structure

mdl = RoverHuman()
mdl.fxns
{'power': power Power
 - t=Time(time=-0.1, timers={})
 - s=PowerState(charge=100.0, power=0.0)
 - m=PowerMode(mode='off', faults=set(), sub_faults=False)
 - ee_15=EE(s=(v=0.0, a=0.0))
 - ee_5=EE(s=(v=0.0, a=0.0))
 - ee_12=EE(s=(v=0.0, a=0.0))
 - switch=Switch(s=(power=False)),
 'perception': perception Perception
 - t=Time(time=-0.1, timers={})
 - m=PerceptionMode(mode='off', faults=set(), sub_faults=False)
 - pos=Pos(s=(x=0.0, y=0.0, vel=0.0, ux=1.0, uy=0.0))
 - pos_signal=Pos(s=(x=0.0, y=0.0, vel=0.0, ux=1.0, uy=0.0))
 - ground=Ground(s=(in_bound=True), c=(), ga=())
 - ee=EE(s=(v=0.0, a=0.0))
 - video=Video(s=(lin_ux=1.0, lin_uy=0.0, lin_dx=0.0, lin_dy=0.0, quality=1.0)),
 'communications': communications Communications
 - t=Time(time=-0.1, timers={})
 - ee_12=EE(s=(v=0.0, a=0.0))
 - comms=Comms(s=(pos=PosState(x=0.0, y=0.0, vel=0.0, ux=1.0, uy=0.0), ctl=ControlState(rpower=0.0, lpower=0.0), video...
 - pos_signal=Pos(s=(x=0.0, y=0.0, vel=0.0, ux=1.0, uy=0.0))
 - video=Video(s=(lin_ux=1.0, lin_uy=0.0, lin_dx=0.0, lin_dy=0.0, quality=1.0)),
 'operator': operator Operator
 - t=Time(time=-0.1, timers={})
 - m=Mode(mode='nominal', faults=set(), sub_faults=False)
 - switch=Switch(s=(power=False))
 - control=Control(s=(rpower=0.0, lpower=0.0))
 - pos_signal=Pos(s=(x=0.0, y=0.0, vel=0.0, ux=1.0, uy=0.0))
 - comms=Comms(s=(pos=PosState(x=0.0, y=0.0, vel=0.0, ux=1.0, uy=0.0), ctl=ControlState(rpower=0.0, lpower=0.0), video...
 - video=Video(s=(lin_ux=1.0, lin_uy=0.0, lin_dx=0.0, lin_dy=0.0, quality=1.0))
 - psfs=PSFs(s=(attention=10.0))
 - ground=Ground(s=(in_bound=True), c=(), ga=())
 - aa=HumanActions(m=(mode='nominal', faults=set(), sub_faults=False)),
 'plan_path': plan_path PlanPath
 - t=Time(time=-0.1, timers={})
 - m=PlanPathMode(mode='standby', faults=set(), sub_faults=False)
 - s=PlanPathState(u_self=[0. 0.], u_lin=[0. 0.], u_lin_dev=[0. 0.], rdiff=0.0, vel_adj=1.0)
 - video=Video(s=(lin_ux=1.0, lin_uy=0.0, lin_dx=0.0, lin_dy=0.0, quality=1.0))
 - pos_signal=Pos(s=(x=0.0, y=0.0, vel=0.0, ux=1.0, uy=0.0))
 - ground=Ground(s=(in_bound=True), c=(), ga=())
 - control=Control(s=(rpower=0.0, lpower=0.0))
 - fault_sig=FaultSig(s=(transfer=1.0, friction=0.0, drift=0.0)),
 'override': override Override
 - t=Time(time=-0.1, timers={})
 - m=OverrideMode(mode='off', faults=set(), sub_faults=False)
 - comms=Comms(s=(pos=PosState(x=0.0, y=0.0, vel=0.0, ux=1.0, uy=0.0), ctl=ControlState(rpower=0.0, lpower=0.0), video...
 - ee=EE(s=(v=0.0, a=0.0))
 - motor_control=Control(s=(rpower=0.0, lpower=0.0))
 - auto_control=Control(s=(rpower=0.0, lpower=0.0)),
 'drive': drive Drive
 - t=Time(time=-0.1, timers={})
 - m=DriveMode(mode='nominal', faults=set(), sub_faults=False)
 - s=FaultStates(transfer=1.0, friction=0.0, drift=0.0)
 - fault_sig=FaultSig(s=(transfer=1.0, friction=0.0, drift=0.0))
 - ground=Ground(s=(in_bound=True), c=(), ga=())
 - pos=Pos(s=(x=0.0, y=0.0, vel=0.0, ux=1.0, uy=0.0))
 - motor_control=Control(s=(rpower=0.0, lpower=0.0))
 - ee_in=EE(s=(v=0.0, a=0.0))}
#%matplotlib qt
#an.graph.set_pos(mdl, gtype='fxnflowgraph')
#%matplotlib inline
g = mdl.as_modelgraph()
fig, ax = g.draw()
../../_images/fb3e9ad7f27610f8b288c969b2ec52990a479459c50cf0193f9acbb1064254db.png
fig.savefig("outputs_paper_idetc_human/rover_structure.pdf", format="pdf", bbox_inches = 'tight', pad_inches = 0)

Visualizing Action Sequence Graph for the Controller

from fmdtools_examples.navigating_rover.model_human import asg_pos
ag = mdl.fxns['operator'].aa.as_modelgraph()
ag.set_pos(**asg_pos)
fig, ax = ag.draw()
../../_images/6fb720ba268a00b9f866f398feab9e6eb17530ea6fa6edaffbf8296005511196.png
fig.savefig("outputs_paper_idetc_human/action_graph.pdf", format="pdf", bbox_inches = 'tight', pad_inches = 0)

Testing behavioral simulation

Execution order

g.set_exec_order(mdl)
fig, ax = g.draw()
../../_images/653427be19c95ef295a24d279f46b8a611225f5acd64bae5129f8e13674b1ef0.png

Performance on turn

mdl = RoverHuman(p={'ground': 'turn'})
endresults, mdlhist = prop.nominal(mdl)
plot_map(mdl, mdlhist)
(<Figure size 400x400 with 1 Axes>, <Axes: xlabel='x', ylabel='y'>)
../../_images/457fa55f5c713e3d6ddb758c0d5dd5b8a493aab039696008b29fc618a560f97e.png

Performance on sine map

mdl = RoverHuman()
endresults, mdlhist = prop.nominal(mdl)
plot_map(mdl, mdlhist)
(<Figure size 400x400 with 1 Axes>, <Axes: xlabel='x', ylabel='y'>)
../../_images/b909ae718a6a50ebe578ddce64d3048ea7101ec7a53e8972fb39127d149a699b.png
from fmdtools.analyze.phases import from_hist
pm = from_hist(mdlhist)
pm
{'power': PhaseMap({np.str_('off'): [np.float64(0.0), np.float64(0.0)], np.str_('supply'): [np.float64(1.0), np.float64(109.0)]}, {np.str_('off'): {np.str_('off')}, np.str_('supply'): {np.str_('supply')}}),
 'perception': PhaseMap({np.str_('off'): [np.float64(0.0), np.float64(1.0)], np.str_('feed'): [np.float64(2.0), np.float64(109.0)]}, {np.str_('off'): {np.str_('off')}, np.str_('feed'): {np.str_('feed')}}),
 'look': PhaseMap({np.str_('nominal'): [np.float64(0.0), np.float64(109.0)]}, {np.str_('nominal'): {np.str_('nominal')}}),
 'percieve': PhaseMap({np.str_('nominal'): [np.float64(0.0), np.float64(0.0)], np.str_('no_action'): [np.float64(1.0), np.float64(1.0)], 'nominal1': [np.float64(2.0), np.float64(109.0)]}, {np.str_('nominal'): {np.str_('nominal'), 'nominal1'}, np.str_('no_action'): {np.str_('no_action')}}),
 'comprehend': PhaseMap({np.str_('nominal'): [np.float64(0.0), np.float64(109.0)]}, {np.str_('nominal'): {np.str_('nominal')}}),
 'project': PhaseMap({np.str_('nominal'): [np.float64(0.0), np.float64(109.0)]}, {np.str_('nominal'): {np.str_('nominal')}}),
 'decide': PhaseMap({np.str_('nominal'): [np.float64(0.0), np.float64(109.0)]}, {np.str_('nominal'): {np.str_('nominal')}}),
 'reach': PhaseMap({np.str_('nominal'): [np.float64(0.0), np.float64(109.0)]}, {np.str_('nominal'): {np.str_('nominal')}}),
 'plan_path': PhaseMap({np.str_('standby'): [np.float64(0.0), np.float64(4.0)], np.str_('drive'): [np.float64(5.0), np.float64(109.0)]}, {np.str_('standby'): {np.str_('standby')}, np.str_('drive'): {np.str_('drive')}}),
 'override': PhaseMap({np.str_('off'): [np.float64(0.0), np.float64(1.0)], np.str_('override'): [np.float64(2.0), np.float64(109.0)]}, {np.str_('off'): {np.str_('off')}, np.str_('override'): {np.str_('override')}})}
phase_fig = pm['override'].plot()
../../_images/0e1c61fbb6a2b024851bd6356f938940f5f2bca356368cbec744749304882483.png

Testing Faults

#app=SampleApproach(mdl, faults='Controller', phases={'drive':phases['Operations']['drive']})

fd = FaultDomain(mdl)
fd.add_all_fxn_modes('operator')
fd
FaultDomain with faults:
 -('roverhuman.fxns.operator.aa.acts.look', 'failed_no_action')
 -('roverhuman.fxns.operator.aa.acts.percieve', 'failed_no_action')
 -('roverhuman.fxns.operator.aa.acts.percieve', 'not_visible')
 -('roverhuman.fxns.operator.aa.acts.percieve', 'wrong_position')
 -('roverhuman.fxns.operator.aa.acts.comprehend', 'failed_no_action')
 -('roverhuman.fxns.operator.aa.acts.project', 'failed_fast')
 -('roverhuman.fxns.operator.aa.acts.project', 'failed_no_action')
 -('roverhuman.fxns.operator.aa.acts.project', 'failed_slow')
 -('roverhuman.fxns.operator.aa.acts.project', 'failed_turn_left')
 -('roverhuman.fxns.operator.aa.acts.project', 'failed_turn_right')
 -...more
fs = FaultSample(fd, phasemap = pm['override'])
fs.add_fault_phases('override')
fs
FaultSample of scenarios: 
 - roverhuman_fxns_operator_aa_acts_look_failed_no_action_t56p0
 - roverhuman_fxns_operator_aa_acts_percieve_failed_no_action_t56p0
 - roverhuman_fxns_operator_aa_acts_percieve_not_visible_t56p0
 - roverhuman_fxns_operator_aa_acts_percieve_wrong_position_t56p0
 - roverhuman_fxns_operator_aa_acts_comprehend_failed_no_action_t56p0
 - roverhuman_fxns_operator_aa_acts_project_failed_fast_t56p0
 - roverhuman_fxns_operator_aa_acts_project_failed_no_action_t56p0
 - roverhuman_fxns_operator_aa_acts_project_failed_slow_t56p0
 - roverhuman_fxns_operator_aa_acts_project_failed_turn_left_t56p0
 - roverhuman_fxns_operator_aa_acts_project_failed_turn_right_t56p0
 - ... (19 total)
fs.scenarios()
[SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.look': ['failed_no_action']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.look', fault='failed_no_action', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_look_failed_no_action_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.percieve': ['failed_no_action']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.percieve', fault='failed_no_action', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_percieve_failed_no_action_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.percieve': ['not_visible']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.percieve', fault='not_visible', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_percieve_not_visible_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.percieve': ['wrong_position']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.percieve', fault='wrong_position', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_percieve_wrong_position_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.comprehend': ['failed_no_action']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.comprehend', fault='failed_no_action', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_comprehend_failed_no_action_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.project': ['failed_fast']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.project', fault='failed_fast', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_project_failed_fast_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.project': ['failed_no_action']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.project', fault='failed_no_action', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_project_failed_no_action_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.project': ['failed_slow']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.project', fault='failed_slow', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_project_failed_slow_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.project': ['failed_turn_left']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.project', fault='failed_turn_left', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_project_failed_turn_left_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.project': ['failed_turn_right']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.project', fault='failed_turn_right', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_project_failed_turn_right_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.decide': ['failed_fast']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.decide', fault='failed_fast', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_decide_failed_fast_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.decide': ['failed_no_action']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.decide', fault='failed_no_action', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_decide_failed_no_action_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.decide': ['failed_slow']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.decide', fault='failed_slow', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_decide_failed_slow_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.decide': ['failed_turn_left']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.decide', fault='failed_turn_left', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_decide_failed_turn_left_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.decide': ['failed_turn_right']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.decide', fault='failed_turn_right', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_decide_failed_turn_right_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.reach': ['failed_no_action']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.reach', fault='failed_no_action', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_reach_failed_no_action_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.press': ['failed_left']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.press', fault='failed_left', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_press_failed_left_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.press': ['failed_right']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.press', fault='failed_right', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_press_failed_right_t56p0', time=np.float64(56.0), phase=np.str_('override')),
 SingleFaultScenario(sequence={56.0: Injection(faults={'roverhuman.fxns.operator.aa.acts.press': ['no_press']}, disturbances={})}, times=(np.float64(56.0),), function='roverhuman.fxns.operator.aa.acts.press', fault='no_press', rate=np.float64(1.0), name='roverhuman_fxns_operator_aa_acts_press_no_press_t56p0', time=np.float64(56.0), phase=np.str_('override'))]
ecs, hists = prop.fault_sample(mdl, fs)
SCENARIOS COMPLETE: 100%|██████████| 19/19 [00:04<00:00,  4.10it/s]
fig, ax = plot_map(mdl, hists)
../../_images/039758b516a5eb3b3f64c13090808d5411052c659670405395f0642001033515.png
fig, ax = plot_map(mdl, hists)
ax.set_xlim(10, 20)
ax.set_ylim(-5, 5)
(-5.0, 5.0)
Ignoring fixed x limits to fulfill fixed data aspect with adjustable data limits.
../../_images/fd97f20339e9a895cfe78a87a7f384edf362ef51eaffdf52f18e581ee39cfcf8.png
fig.savefig("outputs_paper_idetc_human/rover_map.pdf", format="pdf", bbox_inches = 'tight', pad_inches = 0)

Below shows the impact of each fault:

tab = an.tabulate.result_summary_fmea(ecs, hists,
                                      *mdl.flows, *mdl.fxns,
                                      metrics = ["in_bound", "at_finish", "end_dist", "faults", "classification", "end_x", "end_y"])
tab
degraded faulty in_bound at_finish end_dist faults classification end_x end_y
nominal [] [] True True 0.0 [] nominal mission 29.254775 -0.782764
roverhuman_fxns_operator_aa_acts_look_failed_no_action_t56p0 ['ground', 'psfs', 'pos_signal', 'pos', 'video... ['operator'] False False 13.663813 [look.failed_no_action] incomplete mission faulty 15.24424 -0.529458
roverhuman_fxns_operator_aa_acts_percieve_failed_no_action_t56p0 [] [] True True 0.0 [] nominal mission 29.254775 -0.782764
roverhuman_fxns_operator_aa_acts_percieve_not_visible_t56p0 [] [] True True 0.0 [] nominal mission 29.254775 -0.782764
roverhuman_fxns_operator_aa_acts_percieve_wrong_position_t56p0 [] [] True True 0.0 [] nominal mission 29.254775 -0.782764
roverhuman_fxns_operator_aa_acts_comprehend_failed_no_action_t56p0 ['ground', 'psfs', 'pos_signal', 'pos', 'video... ['operator'] False False 13.663813 [percieve.not_visible, comprehend.failed_no_ac... incomplete mission faulty 15.24424 -0.529458
roverhuman_fxns_operator_aa_acts_project_failed_fast_t56p0 ['ground', 'pos_signal', 'pos', 'ee_15', 'vide... ['operator'] False False 12.955107 [percieve.not_visible, project.failed_fast] incomplete mission faulty 16.023518 0.480458
roverhuman_fxns_operator_aa_acts_project_failed_no_action_t56p0 ['ground', 'psfs', 'pos_signal', 'pos', 'video... ['operator'] False False 13.663813 [percieve.not_visible, project.failed_no_action] incomplete mission faulty 15.24424 -0.529458
roverhuman_fxns_operator_aa_acts_project_failed_slow_t56p0 ['psfs', 'pos_signal', 'pos', 'ee_15', 'video'... ['operator'] True False 9.31949 [project.failed_slow] incomplete mission faulty 19.740872 0.81243
roverhuman_fxns_operator_aa_acts_project_failed_turn_left_t56p0 ['ground', 'pos_signal', 'pos', 'video', 'auto... ['operator'] False False 14.057688 [percieve.not_visible, project.failed_turn_left] incomplete mission faulty 14.862043 -0.251773
roverhuman_fxns_operator_aa_acts_project_failed_turn_right_t56p0 ['ground', 'pos_signal', 'pos', 'video', 'auto... ['operator'] False False 13.693675 [percieve.not_visible, project.failed_turn_right] incomplete mission faulty 15.363988 1.140047
roverhuman_fxns_operator_aa_acts_decide_failed_fast_t56p0 ['psfs', 'pos_signal', 'pos', 'ee_15', 'video'... ['operator'] True False 14.2601 [decide.failed_fast] incomplete mission faulty 14.759409 0.904491
roverhuman_fxns_operator_aa_acts_decide_failed_no_action_t56p0 ['ground', 'psfs', 'pos_signal', 'pos', 'video... ['operator'] False False 13.663813 [percieve.not_visible, decide.failed_no_action] incomplete mission faulty 15.24424 -0.529458
roverhuman_fxns_operator_aa_acts_decide_failed_slow_t56p0 ['psfs', 'pos_signal', 'pos', 'ee_15', 'video'... ['operator'] True False 14.2601 [decide.failed_slow] incomplete mission faulty 14.759409 0.904491
roverhuman_fxns_operator_aa_acts_decide_failed_turn_left_t56p0 ['psfs', 'pos_signal', 'pos', 'ee_15', 'video'... ['operator'] True False 14.2601 [decide.failed_turn_left] incomplete mission faulty 14.759409 0.904491
roverhuman_fxns_operator_aa_acts_decide_failed_turn_right_t56p0 ['psfs', 'pos_signal', 'pos', 'ee_15', 'video'... ['operator'] True False 14.2601 [decide.failed_turn_right] incomplete mission faulty 14.759409 0.904491
roverhuman_fxns_operator_aa_acts_reach_failed_no_action_t56p0 ['ground', 'psfs', 'pos_signal', 'pos', 'video... ['operator'] False False 13.663813 [percieve.not_visible, reach.failed_no_action] incomplete mission faulty 15.24424 -0.529458
roverhuman_fxns_operator_aa_acts_press_failed_left_t56p0 ['operator'] ['operator'] True True 0.0 [press.failed_left] faulty 29.254775 -0.782764
roverhuman_fxns_operator_aa_acts_press_failed_right_t56p0 ['operator'] ['operator'] True True 0.0 [press.failed_right] faulty 29.254775 -0.782764
roverhuman_fxns_operator_aa_acts_press_no_press_t56p0 ['operator'] ['operator'] True True 0.0 [press.no_press] faulty 29.254775 -0.782764
tab.sort_values('end_dist', ascending=False)
degraded faulty in_bound at_finish end_dist faults classification end_x end_y
roverhuman_fxns_operator_aa_acts_decide_failed_turn_right_t56p0 ['psfs', 'pos_signal', 'pos', 'ee_15', 'video'... ['operator'] True False 14.2601 [decide.failed_turn_right] incomplete mission faulty 14.759409 0.904491
roverhuman_fxns_operator_aa_acts_decide_failed_fast_t56p0 ['psfs', 'pos_signal', 'pos', 'ee_15', 'video'... ['operator'] True False 14.2601 [decide.failed_fast] incomplete mission faulty 14.759409 0.904491
roverhuman_fxns_operator_aa_acts_decide_failed_slow_t56p0 ['psfs', 'pos_signal', 'pos', 'ee_15', 'video'... ['operator'] True False 14.2601 [decide.failed_slow] incomplete mission faulty 14.759409 0.904491
roverhuman_fxns_operator_aa_acts_decide_failed_turn_left_t56p0 ['psfs', 'pos_signal', 'pos', 'ee_15', 'video'... ['operator'] True False 14.2601 [decide.failed_turn_left] incomplete mission faulty 14.759409 0.904491
roverhuman_fxns_operator_aa_acts_project_failed_turn_left_t56p0 ['ground', 'pos_signal', 'pos', 'video', 'auto... ['operator'] False False 14.057688 [percieve.not_visible, project.failed_turn_left] incomplete mission faulty 14.862043 -0.251773
roverhuman_fxns_operator_aa_acts_project_failed_turn_right_t56p0 ['ground', 'pos_signal', 'pos', 'video', 'auto... ['operator'] False False 13.693675 [percieve.not_visible, project.failed_turn_right] incomplete mission faulty 15.363988 1.140047
roverhuman_fxns_operator_aa_acts_reach_failed_no_action_t56p0 ['ground', 'psfs', 'pos_signal', 'pos', 'video... ['operator'] False False 13.663813 [percieve.not_visible, reach.failed_no_action] incomplete mission faulty 15.24424 -0.529458
roverhuman_fxns_operator_aa_acts_comprehend_failed_no_action_t56p0 ['ground', 'psfs', 'pos_signal', 'pos', 'video... ['operator'] False False 13.663813 [percieve.not_visible, comprehend.failed_no_ac... incomplete mission faulty 15.24424 -0.529458
roverhuman_fxns_operator_aa_acts_project_failed_no_action_t56p0 ['ground', 'psfs', 'pos_signal', 'pos', 'video... ['operator'] False False 13.663813 [percieve.not_visible, project.failed_no_action] incomplete mission faulty 15.24424 -0.529458
roverhuman_fxns_operator_aa_acts_look_failed_no_action_t56p0 ['ground', 'psfs', 'pos_signal', 'pos', 'video... ['operator'] False False 13.663813 [look.failed_no_action] incomplete mission faulty 15.24424 -0.529458
roverhuman_fxns_operator_aa_acts_decide_failed_no_action_t56p0 ['ground', 'psfs', 'pos_signal', 'pos', 'video... ['operator'] False False 13.663813 [percieve.not_visible, decide.failed_no_action] incomplete mission faulty 15.24424 -0.529458
roverhuman_fxns_operator_aa_acts_project_failed_fast_t56p0 ['ground', 'pos_signal', 'pos', 'ee_15', 'vide... ['operator'] False False 12.955107 [percieve.not_visible, project.failed_fast] incomplete mission faulty 16.023518 0.480458
roverhuman_fxns_operator_aa_acts_project_failed_slow_t56p0 ['psfs', 'pos_signal', 'pos', 'ee_15', 'video'... ['operator'] True False 9.31949 [project.failed_slow] incomplete mission faulty 19.740872 0.81243
roverhuman_fxns_operator_aa_acts_press_failed_right_t56p0 ['operator'] ['operator'] True True 0.0 [press.failed_right] faulty 29.254775 -0.782764
roverhuman_fxns_operator_aa_acts_press_failed_left_t56p0 ['operator'] ['operator'] True True 0.0 [press.failed_left] faulty 29.254775 -0.782764
nominal [] [] True True 0.0 [] nominal mission 29.254775 -0.782764
roverhuman_fxns_operator_aa_acts_percieve_wrong_position_t56p0 [] [] True True 0.0 [] nominal mission 29.254775 -0.782764
roverhuman_fxns_operator_aa_acts_percieve_not_visible_t56p0 [] [] True True 0.0 [] nominal mission 29.254775 -0.782764
roverhuman_fxns_operator_aa_acts_percieve_failed_no_action_t56p0 [] [] True True 0.0 [] nominal mission 29.254775 -0.782764
roverhuman_fxns_operator_aa_acts_press_no_press_t56p0 ['operator'] ['operator'] True True 0.0 [press.no_press] faulty 29.254775 -0.782764
print(tab.to_latex())
\begin{tabular}{llllllllll}
\toprule
 & degraded & faulty & in_bound & at_finish & end_dist & faults & classification & end_x & end_y \\
\midrule
nominal & [] & [] & True & True & 0.000000 & [] & nominal mission & 29.254775 & -0.782764 \\
roverhuman_fxns_operator_aa_acts_look_failed_no_action_t56p0 & ['ground', 'psfs', 'pos_signal', 'pos', 'video', 'auto_control', 'motor_control', 'comms', 'power', 'operator', 'plan_path'] & ['operator'] & False & False & 13.663813 & ['look.failed_no_action'] & incomplete mission faulty & 15.244240 & -0.529458 \\
roverhuman_fxns_operator_aa_acts_percieve_failed_no_action_t56p0 & [] & [] & True & True & 0.000000 & [] & nominal mission & 29.254775 & -0.782764 \\
roverhuman_fxns_operator_aa_acts_percieve_not_visible_t56p0 & [] & [] & True & True & 0.000000 & [] & nominal mission & 29.254775 & -0.782764 \\
roverhuman_fxns_operator_aa_acts_percieve_wrong_position_t56p0 & [] & [] & True & True & 0.000000 & [] & nominal mission & 29.254775 & -0.782764 \\
roverhuman_fxns_operator_aa_acts_comprehend_failed_no_action_t56p0 & ['ground', 'psfs', 'pos_signal', 'pos', 'video', 'auto_control', 'motor_control', 'comms', 'power', 'operator', 'plan_path'] & ['operator'] & False & False & 13.663813 & ['percieve.not_visible', 'comprehend.failed_no_action'] & incomplete mission faulty & 15.244240 & -0.529458 \\
roverhuman_fxns_operator_aa_acts_project_failed_fast_t56p0 & ['ground', 'pos_signal', 'pos', 'ee_15', 'video', 'auto_control', 'motor_control', 'comms', 'power', 'operator', 'plan_path'] & ['operator'] & False & False & 12.955107 & ['percieve.not_visible', 'project.failed_fast'] & incomplete mission faulty & 16.023518 & 0.480458 \\
roverhuman_fxns_operator_aa_acts_project_failed_no_action_t56p0 & ['ground', 'psfs', 'pos_signal', 'pos', 'video', 'auto_control', 'motor_control', 'comms', 'power', 'operator', 'plan_path'] & ['operator'] & False & False & 13.663813 & ['percieve.not_visible', 'project.failed_no_action'] & incomplete mission faulty & 15.244240 & -0.529458 \\
roverhuman_fxns_operator_aa_acts_project_failed_slow_t56p0 & ['psfs', 'pos_signal', 'pos', 'ee_15', 'video', 'auto_control', 'motor_control', 'comms', 'power', 'operator', 'plan_path'] & ['operator'] & True & False & 9.319490 & ['project.failed_slow'] & incomplete mission faulty & 19.740872 & 0.812430 \\
roverhuman_fxns_operator_aa_acts_project_failed_turn_left_t56p0 & ['ground', 'pos_signal', 'pos', 'video', 'auto_control', 'motor_control', 'comms', 'power', 'operator', 'plan_path'] & ['operator'] & False & False & 14.057688 & ['percieve.not_visible', 'project.failed_turn_left'] & incomplete mission faulty & 14.862043 & -0.251773 \\
roverhuman_fxns_operator_aa_acts_project_failed_turn_right_t56p0 & ['ground', 'pos_signal', 'pos', 'video', 'auto_control', 'motor_control', 'comms', 'power', 'operator', 'plan_path'] & ['operator'] & False & False & 13.693675 & ['percieve.not_visible', 'project.failed_turn_right'] & incomplete mission faulty & 15.363988 & 1.140047 \\
roverhuman_fxns_operator_aa_acts_decide_failed_fast_t56p0 & ['psfs', 'pos_signal', 'pos', 'ee_15', 'video', 'auto_control', 'motor_control', 'comms', 'power', 'operator', 'plan_path'] & ['operator'] & True & False & 14.260100 & ['decide.failed_fast'] & incomplete mission faulty & 14.759409 & 0.904491 \\
roverhuman_fxns_operator_aa_acts_decide_failed_no_action_t56p0 & ['ground', 'psfs', 'pos_signal', 'pos', 'video', 'auto_control', 'motor_control', 'comms', 'power', 'operator', 'plan_path'] & ['operator'] & False & False & 13.663813 & ['percieve.not_visible', 'decide.failed_no_action'] & incomplete mission faulty & 15.244240 & -0.529458 \\
roverhuman_fxns_operator_aa_acts_decide_failed_slow_t56p0 & ['psfs', 'pos_signal', 'pos', 'ee_15', 'video', 'auto_control', 'motor_control', 'comms', 'power', 'operator', 'plan_path'] & ['operator'] & True & False & 14.260100 & ['decide.failed_slow'] & incomplete mission faulty & 14.759409 & 0.904491 \\
roverhuman_fxns_operator_aa_acts_decide_failed_turn_left_t56p0 & ['psfs', 'pos_signal', 'pos', 'ee_15', 'video', 'auto_control', 'motor_control', 'comms', 'power', 'operator', 'plan_path'] & ['operator'] & True & False & 14.260100 & ['decide.failed_turn_left'] & incomplete mission faulty & 14.759409 & 0.904491 \\
roverhuman_fxns_operator_aa_acts_decide_failed_turn_right_t56p0 & ['psfs', 'pos_signal', 'pos', 'ee_15', 'video', 'auto_control', 'motor_control', 'comms', 'power', 'operator', 'plan_path'] & ['operator'] & True & False & 14.260100 & ['decide.failed_turn_right'] & incomplete mission faulty & 14.759409 & 0.904491 \\
roverhuman_fxns_operator_aa_acts_reach_failed_no_action_t56p0 & ['ground', 'psfs', 'pos_signal', 'pos', 'video', 'auto_control', 'motor_control', 'comms', 'power', 'operator', 'plan_path'] & ['operator'] & False & False & 13.663813 & ['percieve.not_visible', 'reach.failed_no_action'] & incomplete mission faulty & 15.244240 & -0.529458 \\
roverhuman_fxns_operator_aa_acts_press_failed_left_t56p0 & ['operator'] & ['operator'] & True & True & 0.000000 & ['press.failed_left'] &  faulty & 29.254775 & -0.782764 \\
roverhuman_fxns_operator_aa_acts_press_failed_right_t56p0 & ['operator'] & ['operator'] & True & True & 0.000000 & ['press.failed_right'] &  faulty & 29.254775 & -0.782764 \\
roverhuman_fxns_operator_aa_acts_press_no_press_t56p0 & ['operator'] & ['operator'] & True & True & 0.000000 & ['press.no_press'] &  faulty & 29.254775 & -0.782764 \\
\bottomrule
\end{tabular}

As shown, most modes now have an effect.

Examining Performance Shaping Factors

from fmdtools_examples.navigating_rover.model_human import RoverHumanParam
pd = ParameterDomain(RoverHumanParam)
#pd.add_constant('ground.linetype', 'sine')
#pd.add_constant('ground.amp', 4)
pd.add_variable('psfs.fatigue', var_lim=(0, 11))
pd.add_variable('psfs.attention', var_lim=(0, 11))
pd
ParameterDomain with:
 - variables: {'psfs.fatigue': (0, 11), 'psfs.attention': (0, 11)}
 - constants: {}
 - parameter_initializer: RoverHumanParam
ps = ParameterSample(pd)
ps.add_variable_ranges(comb_kwargs={'resolution': 1})
ps
ParameterSample of scenarios:
 - rep0_range_0
 - rep0_range_1
 - rep0_range_2
 - rep0_range_3
 - rep0_range_4
 - rep0_range_5
 - rep0_range_6
 - rep0_range_7
 - rep0_range_8
 - rep0_range_9
 - ... (144 total)
ps.scenarios()
[ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(0), 'attention': np.int64(0)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(0), 1: np.int64(0)}, rangeid='', name='rep0_range_0'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(0), 'attention': np.int64(1)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(0), 1: np.int64(1)}, rangeid='', name='rep0_range_1'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(0), 'attention': np.int64(2)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(0), 1: np.int64(2)}, rangeid='', name='rep0_range_2'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(0), 'attention': np.int64(3)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(0), 1: np.int64(3)}, rangeid='', name='rep0_range_3'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(0), 'attention': np.int64(4)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(0), 1: np.int64(4)}, rangeid='', name='rep0_range_4'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(0), 'attention': np.int64(5)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(0), 1: np.int64(5)}, rangeid='', name='rep0_range_5'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(0), 'attention': np.int64(6)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(0), 1: np.int64(6)}, rangeid='', name='rep0_range_6'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(0), 'attention': np.int64(7)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(0), 1: np.int64(7)}, rangeid='', name='rep0_range_7'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(0), 'attention': np.int64(8)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(0), 1: np.int64(8)}, rangeid='', name='rep0_range_8'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(0), 'attention': np.int64(9)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(0), 1: np.int64(9)}, rangeid='', name='rep0_range_9'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(0), 'attention': np.int64(10)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(0), 1: np.int64(10)}, rangeid='', name='rep0_range_10'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(0), 'attention': np.int64(11)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(0), 1: np.int64(11)}, rangeid='', name='rep0_range_11'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(1), 'attention': np.int64(0)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(1), 1: np.int64(0)}, rangeid='', name='rep0_range_12'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(1), 'attention': np.int64(1)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(1), 1: np.int64(1)}, rangeid='', name='rep0_range_13'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(1), 'attention': np.int64(2)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(1), 1: np.int64(2)}, rangeid='', name='rep0_range_14'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(1), 'attention': np.int64(3)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(1), 1: np.int64(3)}, rangeid='', name='rep0_range_15'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(1), 'attention': np.int64(4)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(1), 1: np.int64(4)}, rangeid='', name='rep0_range_16'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(1), 'attention': np.int64(5)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(1), 1: np.int64(5)}, rangeid='', name='rep0_range_17'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(1), 'attention': np.int64(6)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(1), 1: np.int64(6)}, rangeid='', name='rep0_range_18'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(1), 'attention': np.int64(7)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(1), 1: np.int64(7)}, rangeid='', name='rep0_range_19'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(1), 'attention': np.int64(8)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(1), 1: np.int64(8)}, rangeid='', name='rep0_range_20'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(1), 'attention': np.int64(9)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(1), 1: np.int64(9)}, rangeid='', name='rep0_range_21'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(1), 'attention': np.int64(10)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(1), 1: np.int64(10)}, rangeid='', name='rep0_range_22'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(1), 'attention': np.int64(11)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(1), 1: np.int64(11)}, rangeid='', name='rep0_range_23'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(2), 'attention': np.int64(0)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(2), 1: np.int64(0)}, rangeid='', name='rep0_range_24'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(2), 'attention': np.int64(1)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(2), 1: np.int64(1)}, rangeid='', name='rep0_range_25'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(2), 'attention': np.int64(2)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(2), 1: np.int64(2)}, rangeid='', name='rep0_range_26'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(2), 'attention': np.int64(3)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(2), 1: np.int64(3)}, rangeid='', name='rep0_range_27'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(2), 'attention': np.int64(4)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(2), 1: np.int64(4)}, rangeid='', name='rep0_range_28'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(2), 'attention': np.int64(5)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(2), 1: np.int64(5)}, rangeid='', name='rep0_range_29'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(2), 'attention': np.int64(6)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(2), 1: np.int64(6)}, rangeid='', name='rep0_range_30'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(2), 'attention': np.int64(7)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(2), 1: np.int64(7)}, rangeid='', name='rep0_range_31'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(2), 'attention': np.int64(8)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(2), 1: np.int64(8)}, rangeid='', name='rep0_range_32'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(2), 'attention': np.int64(9)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(2), 1: np.int64(9)}, rangeid='', name='rep0_range_33'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(2), 'attention': np.int64(10)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(2), 1: np.int64(10)}, rangeid='', name='rep0_range_34'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(2), 'attention': np.int64(11)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(2), 1: np.int64(11)}, rangeid='', name='rep0_range_35'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(3), 'attention': np.int64(0)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(3), 1: np.int64(0)}, rangeid='', name='rep0_range_36'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(3), 'attention': np.int64(1)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(3), 1: np.int64(1)}, rangeid='', name='rep0_range_37'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(3), 'attention': np.int64(2)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(3), 1: np.int64(2)}, rangeid='', name='rep0_range_38'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(3), 'attention': np.int64(3)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(3), 1: np.int64(3)}, rangeid='', name='rep0_range_39'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(3), 'attention': np.int64(4)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(3), 1: np.int64(4)}, rangeid='', name='rep0_range_40'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(3), 'attention': np.int64(5)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(3), 1: np.int64(5)}, rangeid='', name='rep0_range_41'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(3), 'attention': np.int64(6)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(3), 1: np.int64(6)}, rangeid='', name='rep0_range_42'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(3), 'attention': np.int64(7)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(3), 1: np.int64(7)}, rangeid='', name='rep0_range_43'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(3), 'attention': np.int64(8)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(3), 1: np.int64(8)}, rangeid='', name='rep0_range_44'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(3), 'attention': np.int64(9)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(3), 1: np.int64(9)}, rangeid='', name='rep0_range_45'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(3), 'attention': np.int64(10)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(3), 1: np.int64(10)}, rangeid='', name='rep0_range_46'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(3), 'attention': np.int64(11)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(3), 1: np.int64(11)}, rangeid='', name='rep0_range_47'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(4), 'attention': np.int64(0)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(4), 1: np.int64(0)}, rangeid='', name='rep0_range_48'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(4), 'attention': np.int64(1)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(4), 1: np.int64(1)}, rangeid='', name='rep0_range_49'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(4), 'attention': np.int64(2)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(4), 1: np.int64(2)}, rangeid='', name='rep0_range_50'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(4), 'attention': np.int64(3)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(4), 1: np.int64(3)}, rangeid='', name='rep0_range_51'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(4), 'attention': np.int64(4)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(4), 1: np.int64(4)}, rangeid='', name='rep0_range_52'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(4), 'attention': np.int64(5)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(4), 1: np.int64(5)}, rangeid='', name='rep0_range_53'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(4), 'attention': np.int64(6)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(4), 1: np.int64(6)}, rangeid='', name='rep0_range_54'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(4), 'attention': np.int64(7)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(4), 1: np.int64(7)}, rangeid='', name='rep0_range_55'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(4), 'attention': np.int64(8)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(4), 1: np.int64(8)}, rangeid='', name='rep0_range_56'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(4), 'attention': np.int64(9)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(4), 1: np.int64(9)}, rangeid='', name='rep0_range_57'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(4), 'attention': np.int64(10)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(4), 1: np.int64(10)}, rangeid='', name='rep0_range_58'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(4), 'attention': np.int64(11)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(4), 1: np.int64(11)}, rangeid='', name='rep0_range_59'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(5), 'attention': np.int64(0)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(5), 1: np.int64(0)}, rangeid='', name='rep0_range_60'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(5), 'attention': np.int64(1)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(5), 1: np.int64(1)}, rangeid='', name='rep0_range_61'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(5), 'attention': np.int64(2)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(5), 1: np.int64(2)}, rangeid='', name='rep0_range_62'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(5), 'attention': np.int64(3)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(5), 1: np.int64(3)}, rangeid='', name='rep0_range_63'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(5), 'attention': np.int64(4)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(5), 1: np.int64(4)}, rangeid='', name='rep0_range_64'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(5), 'attention': np.int64(5)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(5), 1: np.int64(5)}, rangeid='', name='rep0_range_65'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(5), 'attention': np.int64(6)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(5), 1: np.int64(6)}, rangeid='', name='rep0_range_66'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(5), 'attention': np.int64(7)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(5), 1: np.int64(7)}, rangeid='', name='rep0_range_67'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(5), 'attention': np.int64(8)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(5), 1: np.int64(8)}, rangeid='', name='rep0_range_68'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(5), 'attention': np.int64(9)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(5), 1: np.int64(9)}, rangeid='', name='rep0_range_69'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(5), 'attention': np.int64(10)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(5), 1: np.int64(10)}, rangeid='', name='rep0_range_70'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(5), 'attention': np.int64(11)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(5), 1: np.int64(11)}, rangeid='', name='rep0_range_71'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(6), 'attention': np.int64(0)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(6), 1: np.int64(0)}, rangeid='', name='rep0_range_72'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(6), 'attention': np.int64(1)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(6), 1: np.int64(1)}, rangeid='', name='rep0_range_73'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(6), 'attention': np.int64(2)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(6), 1: np.int64(2)}, rangeid='', name='rep0_range_74'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(6), 'attention': np.int64(3)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(6), 1: np.int64(3)}, rangeid='', name='rep0_range_75'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(6), 'attention': np.int64(4)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(6), 1: np.int64(4)}, rangeid='', name='rep0_range_76'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(6), 'attention': np.int64(5)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(6), 1: np.int64(5)}, rangeid='', name='rep0_range_77'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(6), 'attention': np.int64(6)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(6), 1: np.int64(6)}, rangeid='', name='rep0_range_78'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(6), 'attention': np.int64(7)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(6), 1: np.int64(7)}, rangeid='', name='rep0_range_79'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(6), 'attention': np.int64(8)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(6), 1: np.int64(8)}, rangeid='', name='rep0_range_80'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(6), 'attention': np.int64(9)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(6), 1: np.int64(9)}, rangeid='', name='rep0_range_81'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(6), 'attention': np.int64(10)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(6), 1: np.int64(10)}, rangeid='', name='rep0_range_82'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(6), 'attention': np.int64(11)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(6), 1: np.int64(11)}, rangeid='', name='rep0_range_83'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(7), 'attention': np.int64(0)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(7), 1: np.int64(0)}, rangeid='', name='rep0_range_84'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(7), 'attention': np.int64(1)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(7), 1: np.int64(1)}, rangeid='', name='rep0_range_85'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(7), 'attention': np.int64(2)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(7), 1: np.int64(2)}, rangeid='', name='rep0_range_86'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(7), 'attention': np.int64(3)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(7), 1: np.int64(3)}, rangeid='', name='rep0_range_87'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(7), 'attention': np.int64(4)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(7), 1: np.int64(4)}, rangeid='', name='rep0_range_88'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(7), 'attention': np.int64(5)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(7), 1: np.int64(5)}, rangeid='', name='rep0_range_89'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(7), 'attention': np.int64(6)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(7), 1: np.int64(6)}, rangeid='', name='rep0_range_90'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(7), 'attention': np.int64(7)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(7), 1: np.int64(7)}, rangeid='', name='rep0_range_91'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(7), 'attention': np.int64(8)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(7), 1: np.int64(8)}, rangeid='', name='rep0_range_92'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(7), 'attention': np.int64(9)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(7), 1: np.int64(9)}, rangeid='', name='rep0_range_93'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(7), 'attention': np.int64(10)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(7), 1: np.int64(10)}, rangeid='', name='rep0_range_94'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(7), 'attention': np.int64(11)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(7), 1: np.int64(11)}, rangeid='', name='rep0_range_95'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(8), 'attention': np.int64(0)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(8), 1: np.int64(0)}, rangeid='', name='rep0_range_96'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(8), 'attention': np.int64(1)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(8), 1: np.int64(1)}, rangeid='', name='rep0_range_97'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(8), 'attention': np.int64(2)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(8), 1: np.int64(2)}, rangeid='', name='rep0_range_98'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(8), 'attention': np.int64(3)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(8), 1: np.int64(3)}, rangeid='', name='rep0_range_99'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(8), 'attention': np.int64(4)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(8), 1: np.int64(4)}, rangeid='', name='rep0_range_100'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(8), 'attention': np.int64(5)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(8), 1: np.int64(5)}, rangeid='', name='rep0_range_101'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(8), 'attention': np.int64(6)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(8), 1: np.int64(6)}, rangeid='', name='rep0_range_102'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(8), 'attention': np.int64(7)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(8), 1: np.int64(7)}, rangeid='', name='rep0_range_103'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(8), 'attention': np.int64(8)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(8), 1: np.int64(8)}, rangeid='', name='rep0_range_104'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(8), 'attention': np.int64(9)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(8), 1: np.int64(9)}, rangeid='', name='rep0_range_105'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(8), 'attention': np.int64(10)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(8), 1: np.int64(10)}, rangeid='', name='rep0_range_106'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(8), 'attention': np.int64(11)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(8), 1: np.int64(11)}, rangeid='', name='rep0_range_107'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(9), 'attention': np.int64(0)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(9), 1: np.int64(0)}, rangeid='', name='rep0_range_108'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(9), 'attention': np.int64(1)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(9), 1: np.int64(1)}, rangeid='', name='rep0_range_109'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(9), 'attention': np.int64(2)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(9), 1: np.int64(2)}, rangeid='', name='rep0_range_110'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(9), 'attention': np.int64(3)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(9), 1: np.int64(3)}, rangeid='', name='rep0_range_111'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(9), 'attention': np.int64(4)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(9), 1: np.int64(4)}, rangeid='', name='rep0_range_112'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(9), 'attention': np.int64(5)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(9), 1: np.int64(5)}, rangeid='', name='rep0_range_113'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(9), 'attention': np.int64(6)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(9), 1: np.int64(6)}, rangeid='', name='rep0_range_114'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(9), 'attention': np.int64(7)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(9), 1: np.int64(7)}, rangeid='', name='rep0_range_115'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(9), 'attention': np.int64(8)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(9), 1: np.int64(8)}, rangeid='', name='rep0_range_116'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(9), 'attention': np.int64(9)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(9), 1: np.int64(9)}, rangeid='', name='rep0_range_117'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(9), 'attention': np.int64(10)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(9), 1: np.int64(10)}, rangeid='', name='rep0_range_118'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(9), 'attention': np.int64(11)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(9), 1: np.int64(11)}, rangeid='', name='rep0_range_119'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(10), 'attention': np.int64(0)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(10), 1: np.int64(0)}, rangeid='', name='rep0_range_120'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(10), 'attention': np.int64(1)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(10), 1: np.int64(1)}, rangeid='', name='rep0_range_121'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(10), 'attention': np.int64(2)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(10), 1: np.int64(2)}, rangeid='', name='rep0_range_122'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(10), 'attention': np.int64(3)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(10), 1: np.int64(3)}, rangeid='', name='rep0_range_123'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(10), 'attention': np.int64(4)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(10), 1: np.int64(4)}, rangeid='', name='rep0_range_124'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(10), 'attention': np.int64(5)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(10), 1: np.int64(5)}, rangeid='', name='rep0_range_125'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(10), 'attention': np.int64(6)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(10), 1: np.int64(6)}, rangeid='', name='rep0_range_126'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(10), 'attention': np.int64(7)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(10), 1: np.int64(7)}, rangeid='', name='rep0_range_127'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(10), 'attention': np.int64(8)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(10), 1: np.int64(8)}, rangeid='', name='rep0_range_128'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(10), 'attention': np.int64(9)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(10), 1: np.int64(9)}, rangeid='', name='rep0_range_129'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(10), 'attention': np.int64(10)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(10), 1: np.int64(10)}, rangeid='', name='rep0_range_130'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(10), 'attention': np.int64(11)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(10), 1: np.int64(11)}, rangeid='', name='rep0_range_131'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(11), 'attention': np.int64(0)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(11), 1: np.int64(0)}, rangeid='', name='rep0_range_132'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(11), 'attention': np.int64(1)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(11), 1: np.int64(1)}, rangeid='', name='rep0_range_133'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(11), 'attention': np.int64(2)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(11), 1: np.int64(2)}, rangeid='', name='rep0_range_134'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(11), 'attention': np.int64(3)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(11), 1: np.int64(3)}, rangeid='', name='rep0_range_135'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(11), 'attention': np.int64(4)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(11), 1: np.int64(4)}, rangeid='', name='rep0_range_136'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(11), 'attention': np.int64(5)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(11), 1: np.int64(5)}, rangeid='', name='rep0_range_137'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(11), 'attention': np.int64(6)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(11), 1: np.int64(6)}, rangeid='', name='rep0_range_138'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(11), 'attention': np.int64(7)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(11), 1: np.int64(7)}, rangeid='', name='rep0_range_139'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(11), 'attention': np.int64(8)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(11), 1: np.int64(8)}, rangeid='', name='rep0_range_140'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(11), 'attention': np.int64(9)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(11), 1: np.int64(9)}, rangeid='', name='rep0_range_141'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(11), 'attention': np.int64(10)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(11), 1: np.int64(10)}, rangeid='', name='rep0_range_142'),
 ParameterScenario(sequence={}, times=(), p={'psfs': {'fatigue': np.int64(11), 'attention': np.int64(11)}}, r={}, sp={}, prob=0.006944444444444444, inputparams={0: np.int64(11), 1: np.int64(11)}, rangeid='', name='rep0_range_143')]
ers, hists = prop.parameter_sample(mdl, ps)
SCENARIOS COMPLETE: 100%|██████████| 144/144 [01:12<00:00,  1.98it/s]
plot_map(mdl, hists)
(<Figure size 400x400 with 1 Axes>, <Axes: xlabel='x', ylabel='y'>)
../../_images/02e4dfb48510021e979f0b1c1323cf73fb34355b79be6396ab5025399cf3ae4f.png
ers.get_values("end_x")
rep0_range_0.tend.classify.end_x: 29.254775331608617
rep0_range_1.tend.classify.end_x: 29.254775331608617
rep0_range_2.tend.classify.end_x: 29.254775331608617
rep0_range_3.tend.classify.end_x: 29.254775331608617
rep0_range_4.tend.classify.end_x: 29.254775331608617
rep0_range_5.tend.classify.end_x: 29.254775331608617
rep0_range_6.tend.classify.end_x: 29.254775331608617
rep0_range_7.tend.classify.end_x: 29.254775331608617
rep0_range_8.tend.classify.end_x: 29.254775331608617
rep0_range_9.tend.classify.end_x: 29.254775331608617
rep0_range_10.tend.classify.end_x: 29.254775331608617
rep0_range_11.tend.classify.end_x: 29.254775331608617
rep0_range_12.tend.classify.end_x: 29.254775331608617
rep0_range_13.tend.classify.end_x: 29.254775331608617
rep0_range_14.tend.classify.end_x: 29.254775331608617
rep0_range_15.tend.classify.end_x: 29.254775331608617
rep0_range_16.tend.classify.end_x: 29.254775331608617
rep0_range_17.tend.classify.end_x: 29.254775331608617
rep0_range_18.tend.classify.end_x: 29.254775331608617
rep0_range_19.tend.classify.end_x: 29.254775331608617
rep0_range_20.tend.classify.end_x: 29.254775331608617
rep0_range_21.tend.classify.end_x: 29.254775331608617
rep0_range_22.tend.classify.end_x: 29.254775331608617
rep0_range_23.tend.classify.end_x: 29.254775331608617
rep0_range_24.tend.classify.end_x: 29.254775331608617
rep0_range_25.tend.classify.end_x: 29.254775331608617
rep0_range_26.tend.classify.end_x: 29.254775331608617
rep0_range_27.tend.classify.end_x: 29.254775331608617
rep0_range_28.tend.classify.end_x: 29.254775331608617
rep0_range_29.tend.classify.end_x: 29.254775331608617
rep0_range_30.tend.classify.end_x: 29.254775331608617
rep0_range_31.tend.classify.end_x: 29.254775331608617
rep0_range_32.tend.classify.end_x: 29.254775331608617
rep0_range_33.tend.classify.end_x: 29.254775331608617
rep0_range_34.tend.classify.end_x: 29.254775331608617
rep0_range_35.tend.classify.end_x: 29.254775331608617
rep0_range_36.tend.classify.end_x: 29.254775331608617
rep0_range_37.tend.classify.end_x: 29.254775331608617
rep0_range_38.tend.classify.end_x: 29.254775331608617
rep0_range_39.tend.classify.end_x: 29.254775331608617
rep0_range_40.tend.classify.end_x: 29.254775331608617
rep0_range_41.tend.classify.end_x: 29.254775331608617
rep0_range_42.tend.classify.end_x: 29.254775331608617
rep0_range_43.tend.classify.end_x: 29.254775331608617
rep0_range_44.tend.classify.end_x: 29.254775331608617
rep0_range_45.tend.classify.end_x: 29.254775331608617
rep0_range_46.tend.classify.end_x: 29.254775331608617
rep0_range_47.tend.classify.end_x: 29.254775331608617
rep0_range_48.tend.classify.end_x: 29.254775331608617
rep0_range_49.tend.classify.end_x: 29.254775331608617
rep0_range_50.tend.classify.end_x: 29.254775331608617
rep0_range_51.tend.classify.end_x: 29.254775331608617
rep0_range_52.tend.classify.end_x: 29.254775331608617
rep0_range_53.tend.classify.end_x: 29.254775331608617
rep0_range_54.tend.classify.end_x: 29.254775331608617
rep0_range_55.tend.classify.end_x: 29.254775331608617
rep0_range_56.tend.classify.end_x: 29.254775331608617
rep0_range_57.tend.classify.end_x: 29.254775331608617
rep0_range_58.tend.classify.end_x: 29.254775331608617
rep0_range_59.tend.classify.end_x: 29.254775331608617
rep0_range_60.tend.classify.end_x: 29.254775331608617
rep0_range_61.tend.classify.end_x: 29.254775331608617
rep0_range_62.tend.classify.end_x: 29.254775331608617
rep0_range_63.tend.classify.end_x: 29.254775331608617
rep0_range_64.tend.classify.end_x: 29.254775331608617
rep0_range_65.tend.classify.end_x: 29.254775331608617
rep0_range_66.tend.classify.end_x: 29.254775331608617
rep0_range_67.tend.classify.end_x: 29.254775331608617
rep0_range_68.tend.classify.end_x: 29.254775331608617
rep0_range_69.tend.classify.end_x: 29.254775331608617
rep0_range_70.tend.classify.end_x: 29.254775331608617
rep0_range_71.tend.classify.end_x: 29.254775331608617
rep0_range_72.tend.classify.end_x: 29.254775331608617
rep0_range_73.tend.classify.end_x: 29.254775331608617
rep0_range_74.tend.classify.end_x: 29.254775331608617
rep0_range_75.tend.classify.end_x: 29.254775331608617
rep0_range_76.tend.classify.end_x: 29.254775331608617
rep0_range_77.tend.classify.end_x: 29.254775331608617
rep0_range_78.tend.classify.end_x: 29.254775331608617
rep0_range_79.tend.classify.end_x: 29.254775331608617
rep0_range_80.tend.classify.end_x: 29.254775331608617
rep0_range_81.tend.classify.end_x: 29.254775331608617
rep0_range_82.tend.classify.end_x: 29.254775331608617
rep0_range_83.tend.classify.end_x: 29.254775331608617
rep0_range_84.tend.classify.end_x: 29.254775331608617
rep0_range_85.tend.classify.end_x: 29.254775331608617
rep0_range_86.tend.classify.end_x: 29.254775331608617
rep0_range_87.tend.classify.end_x: 29.254775331608617
rep0_range_88.tend.classify.end_x: 29.254775331608617
rep0_range_89.tend.classify.end_x: 29.254775331608617
rep0_range_90.tend.classify.end_x: 29.254775331608617
rep0_range_91.tend.classify.end_x: 29.254775331608617
rep0_range_92.tend.classify.end_x: 29.254775331608617
rep0_range_93.tend.classify.end_x: 29.254775331608617
rep0_range_94.tend.classify.end_x: 29.254775331608617
rep0_range_95.tend.classify.end_x: 29.254775331608617
rep0_range_96.tend.classify.end_x: 29.254775331608617
rep0_range_97.tend.classify.end_x: 29.254775331608617
rep0_range_98.tend.classify.end_x: 29.254775331608617
 ...144 lines
from fmdtools.analyze.tabulate import NominalEnvelope
na = NominalEnvelope(ps, ers, 'at_finish', 'p.psfs.fatigue', 'p.psfs.attention', func= lambda x: x)
fig, ax = na.plot_scatter()
../../_images/4b935826358d008e2d8b93b440c259f4f81f16cfd16f811dc492334e84b6df7d.png
fig.savefig("outputs_paper_idetc_human/nominal_psfs.pdf", format="pdf", bbox_inches = 'tight', pad_inches = 0)
mdl = RoverHuman(p={'ground': {'linetype': 'turn'}})
endresults, mdlhist = prop.one_fault(mdl, 'operator.aa.acts.look', 'failed_no_action', time=15)
endresults
nominal.tend.classify.rate:          1.0
nominal.tend.classify.cost:            0
nominal.tend.classify.prob:          1.0
nominal.tend.classify.expected_cost:   0
nominal.tend.classify.in_bound:     True
nominal.tend.classify.at_finish:    True
nominal.tend.classify.line_dist:       1
nominal.tend.classify.num_modes:       0
nominal.tend.classify.end_dist:      0.0
nominal.tend.classify.tot_deviation: 0.005246344989065292
nominal.tend.classify.faults:   array(0)
nominal.tend.classify.classification: nominal mission
nominal.tend.classify.end_x: 29.813614084369863
nominal.tend.classify.end_y: 17.26588133276667
nominal.tend.classify.endpt:    array(2)
operator_aa_acts_loo                 1.0
operator_aa_acts_loo                   0
operator_aa_acts_loo                 1.0
operator_aa_acts_loo                   0
operator_aa_acts_loo               False
operator_aa_acts_loo               False
operator_aa_acts_loo                   1
operator_aa_acts_loo                   1
operator_aa_acts_loo  23.466067426611588
operator_aa_acts_loo  0.2759017544282031
operator_aa_acts_loo            array(1)
operator_aa_acts_looincomplete mission faulty
operator_aa_acts_loo   13.33333333333334
operator_aa_acts_loo                 0.0
operator_aa_acts_loo            array(2)
traj_fig = plot_map(mdl, mdlhist)
../../_images/c4c9850412c4767f0aab97f6669d7e3f5482ebba7265822eb9945e5b7ab67a08.png
mdlhist.plot_trajectories('flows.pos.s.x', 'flows.pos.s.y')
(<Figure size 400x400 with 1 Axes>, <Axes: xlabel='x', ylabel='y'>)
../../_images/ff51139b7ff30a832f67039f9b0d36e5c5f069ef9e58cd0b5a394a3ba31fdeba.png
mdlhist.plot_line('flows.pos.s.vel', 'flows.pos.s.ux', 'flows.pos.s.uy')
(<Figure size 600x400 with 4 Axes>,
 array([<Axes: title={'center': 'flows.pos.s.vel'}, xlabel=' '>,
        <Axes: title={'center': 'flows.pos.s.ux'}, xlabel='time'>,
        <Axes: title={'center': 'flows.pos.s.uy'}, xlabel='time'>,
        <Axes: >], dtype=object))
../../_images/4a5679fa841fbb448310ebc50fee04533a622c19c49b17c4da93a2b032d4ab66.png
fs = FaultSample(fd)
fs.add_fault_times([j for j in range(0, 30, 5)])
fs
FaultSample of scenarios: 
 - roverhuman_fxns_operator_aa_acts_look_failed_no_action_t0
 - roverhuman_fxns_operator_aa_acts_look_failed_no_action_t5
 - roverhuman_fxns_operator_aa_acts_look_failed_no_action_t10
 - roverhuman_fxns_operator_aa_acts_look_failed_no_action_t15
 - roverhuman_fxns_operator_aa_acts_look_failed_no_action_t20
 - roverhuman_fxns_operator_aa_acts_look_failed_no_action_t25
 - roverhuman_fxns_operator_aa_acts_percieve_failed_no_action_t0
 - roverhuman_fxns_operator_aa_acts_percieve_failed_no_action_t5
 - roverhuman_fxns_operator_aa_acts_percieve_failed_no_action_t10
 - roverhuman_fxns_operator_aa_acts_percieve_failed_no_action_t15
 - ... (114 total)
ers, hists = prop.fault_sample(mdl, fs)
SCENARIOS COMPLETE: 100%|██████████| 114/114 [00:44<00:00,  2.56it/s]
fig, ax = plot_map(mdl, hists)
../../_images/d4b64f736369a1f447ba37084bb50afc977fc8a5d7e14e55c1ac7c8612b7f151.png
fig.savefig("outputs_paper_idetc_human/nocon_trajectories.pdf", format="pdf", bbox_inches = 'tight', pad_inches = 0)
fig, ax = hists.plot_line('flows.psfs.s.attention')
../../_images/0f21603be9a19e091bd540fd4d9369590d77e64107c1143c855e0ad72071476c.png
fig.savefig("outputs_paper_idetc_human/nocon_attention.pdf", format="pdf", bbox_inches = 'tight', pad_inches = 0)
mdl = RoverHuman(p={'ground': {'linetype': 'sine', 'amp': 2, 'period': 2/3.14*30}})
ers, hists = prop.fault_sample(mdl, fs)
SCENARIOS COMPLETE: 100%|██████████| 114/114 [00:39<00:00,  2.89it/s]
fig, ax = plot_map(mdl, hists)
../../_images/10d04c5bc74d95c23cd5851cedfe48151931e6fcae3c400d478ba6edfd871b24.png
fig.savefig("outputs_paper_idetc_human/nocon_trajectories_sine.pdf", format="pdf", bbox_inches = 'tight', pad_inches = 0)
fig, ax = hists.plot_line('flows.psfs.s.attention')
../../_images/c513ea0dcf4355ab38cad6a4a9fa6f30515df8f459f4a87da6cc4452bf5a7eb0.png
fig.savefig("outputs_paper_idetc_human/nocon_attention_sine.pdf", format="pdf", bbox_inches = 'tight', pad_inches = 0)