def define_ha(settings, usafe_r=None): '''make the hybrid automaton and return it''' ha = LinearHybridAutomaton() ha.variables = ["x1", "x2", "x3", "x4"] # loc1 = ha.new_mode('loc1') a_matrix = np.array([[1, 0, 0.1, 0], [0, 1, 0, 0.1], [0, 0, 0.8870, 0.0089], [0, 0, 0.0089, 0.8870]], dtype=float) # exp 1 b_matrix = np.array([[1, 0], [0, 0], [1, 0], [0, 1]], dtype=float) print(a_matrix, b_matrix) R_mult_factor = 0.1 Q_matrix = np.eye(len(a_matrix[0]), dtype=float) u_dim = len(b_matrix[0]) R_matrix = R_mult_factor * np.eye(u_dim) print(a_matrix, b_matrix, Q_matrix, R_matrix) k_matrix = get_input(a_matrix, b_matrix, Q_matrix, R_matrix) print(k_matrix) a_bk_matrix = a_matrix - np.matmul(b_matrix, k_matrix) loc1.a_matrix = a_bk_matrix loc1.c_vector = np.array([0.0, 0.0, 0.0, 0.0], dtype=float) # print(a_bk_matrix) error = ha.new_mode('_error') error.is_error = True usafe_set_constraint_list = [] if usafe_r is None: # exp 1 # significant diff (10 sec) across equivalent/non-equ runs for p_intersect without reverse # usafe_set_constraint_list.append(LinearConstraint([1.0, 0.0, 0.0, 0.0], -4.8)) # exp 2 # significant diff (13-15 sec) across equivalent/non-equ runs for p_intersect without reverse # usafe_set_constraint_list.append(LinearConstraint([0.0, 0.0, 1.0, 0.0], -5.0)) # exp 3 usafe_set_constraint_list.append( LinearConstraint([1.0, 0.0, 0.0, 0.0], -5.2)) else: usafe_star = init_hr_to_star(settings, usafe_r, ha.modes['_error']) for constraint in usafe_star.constraint_list: usafe_set_constraint_list.append(constraint) trans = ha.new_transition(loc1, error) for constraint in usafe_set_constraint_list: trans.condition_list.append(constraint) return ha, usafe_set_constraint_list
def define_ha(settings, usafe_r=None): '''make the hybrid automaton and return it''' ha = LinearHybridAutomaton() ha.variables = ["x1", "x2"] # loc1 = ha.new_mode('loc1') # exp 1 and 2 a_matrix = np.array([[0.983498664120250, 0.101548195541291], [-0.013528375561473, 0.935610369333783]], dtype=float) # exp 1 b_matrix = np.array([[0.0], [0.0]], dtype=float) # # exp2 # b_matrix = np.array([[1], [1]], dtype=float) print(a_matrix, b_matrix) R_mult_factor = 0.2 Q_matrix = np.eye(len(a_matrix[0]), dtype=float) u_dim = len(b_matrix[0]) R_matrix = R_mult_factor * np.eye(u_dim) print(a_matrix, b_matrix, Q_matrix, R_matrix) k_matrix = get_input(a_matrix, b_matrix, Q_matrix, R_matrix) print(k_matrix) # a_bk_matrix = a_matrix_ext - np.matmul(b_matrix_ext, k_matrix) a_bk_matrix = a_matrix - np.matmul(b_matrix, k_matrix) loc1.a_matrix = a_bk_matrix loc1.c_vector = np.array([0.0, 0.0], dtype=float) error = ha.new_mode('_error') error.is_error = True usafe_set_constraint_list = [] if usafe_r is None: # exp 1 usafe_set_constraint_list.append(LinearConstraint([-1.0, 0.0], -2.0)) # usafe_set_constraint_list.append(LinearConstraint([0.0, 1.0], -0.85)) else: usafe_star = init_hr_to_star(settings, usafe_r, ha.modes['_error']) for constraint in usafe_star.constraint_list: usafe_set_constraint_list.append(constraint) trans = ha.new_transition(loc1, error) for constraint in usafe_set_constraint_list: trans.condition_list.append(constraint) return ha, usafe_set_constraint_list
def define_ha(settings, usafe_r=None): '''make the hybrid automaton and return it''' ha = LinearHybridAutomaton() ha.variables = ["x1", "x2", "x3", "x4"] # loc1 = ha.new_mode('loc1') a_matrix = np.array( [[1, 0, 0, 0], [0, 2, 0.5, 0], [0, 0, 1, 0], [0, 0, 0, 0.5]], dtype=float) # exp 1 b_matrix = np.array( [[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 3, 0], [0, 2, 0, 1]], dtype=float) print(a_matrix, b_matrix) R_mult_factor = 0.1 Q_matrix = np.eye(len(a_matrix[0]), dtype=float) u_dim = len(b_matrix[0]) R_matrix = R_mult_factor * np.eye(u_dim) print(a_matrix, b_matrix, Q_matrix, R_matrix) k_matrix = get_input(a_matrix, b_matrix, Q_matrix, R_matrix) print(k_matrix) a_bk_matrix = a_matrix - np.matmul(b_matrix, k_matrix) loc1.a_matrix = a_bk_matrix loc1.c_vector = np.array([0.0, 0.0, 0.0, 0.0], dtype=float) # print(a_bk_matrix) error = ha.new_mode('_error') error.is_error = True usafe_set_constraint_list = [] if usafe_r is None: # exp 1 # usafe_set_constraint_list.append(LinearConstraint([0.0, 0.0, 0.0, 1.0], -2.9)) # exp 2 usafe_set_constraint_list.append( LinearConstraint([0.0, 0.0, 0.0, 1.0], -3.42)) else: usafe_star = init_hr_to_star(settings, usafe_r, ha.modes['_error']) for constraint in usafe_star.constraint_list: usafe_set_constraint_list.append(constraint) trans = ha.new_transition(loc1, error) for constraint in usafe_set_constraint_list: trans.condition_list.append(constraint) return ha, usafe_set_constraint_list
def define_ha(settings, usafe_r=None): '''make the hybrid automaton and return it''' ha = LinearHybridAutomaton() ha.variables = ["x1", "x2", "x3", "x4", "x5", "x6"] # loc1 = ha.new_mode('loc1') a_matrix = np.array([[0, 1, 0, 0, 0, 0], [0, 0, -0.0106, 0.0106, -0.0106, 0.0106], [0, 0, -10, 0, 0, 0], [0, 0, 0, -10, 0, 0], [0, 0, 0, 0, -10, 0], [0, 0, 0, 0, 0, -10]], dtype=float) b_matrix = np.array([[0], [0], [1], [-1], [1], [-1]], dtype=float) print(a_matrix, b_matrix) R_mult_factor = 0.01 Q_matrix = np.eye(len(a_matrix[0]), dtype=float) u_dim = len(b_matrix[0]) R_matrix = R_mult_factor * np.eye(u_dim) print(a_matrix, b_matrix, Q_matrix, R_matrix) k_matrix = get_input(a_matrix, b_matrix, Q_matrix, R_matrix) print(k_matrix) a_bk_matrix = a_matrix - np.matmul(b_matrix, k_matrix) loc1.a_matrix = a_bk_matrix loc1.c_vector = np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.0], dtype=float) # print(a_bk_matrix) error = ha.new_mode('_error') error.is_error = True usafe_set_constraint_list = [] if usafe_r is None: # exp 1 # usafe_set_constraint_list.append(LinearConstraint([-1.0, 0.0, 0.0, 0.0, 0.0, 0.0], -0.4)) # exp 2 usafe_set_constraint_list.append(LinearConstraint([0.0, 0.0, -1.0, 0.0, 0.0, 0.0], -0.41)) # To find the error (reverse - number of counterexamples reduced in equ run) # usafe_set_constraint_list.append(LinearConstraint([0.0, 0.0, -1.0, 0.0, 0.0, 0.0], -0.47)) # exp 3 To find the error (reverse - number of counterexamples increased in equ run) # Gets fixed with following values # bigM = 10000.0 # lb = -1000.0 # ub = 1000.0 # or epsilon2 = 0.00001 (Earlier it was 0.0005) # usafe_set_constraint_list.append(LinearConstraint([-1.0, 0.0, 0.0, 0.0, 0.0, 0.0], -0.4)) else: usafe_star = init_hr_to_star(settings, usafe_r, ha.modes['_error']) for constraint in usafe_star.constraint_list: usafe_set_constraint_list.append(constraint) trans = ha.new_transition(loc1, error) for constraint in usafe_set_constraint_list: trans.condition_list.append(constraint) return ha, usafe_set_constraint_list
def define_ha(settings, usafe_r=None): '''make the hybrid automaton and return it''' ha = LinearHybridAutomaton() ha.variables = ["x1", "x2"] # loc1 = ha.new_mode('loc1') # a_matrix = np.array([[0.0, 2.0], [1.0, 0.0]], dtype=float) # exp 1 and 2 a_matrix = np.array([[0.0, 2.0], [-1.5, 0.0]], dtype=float) # exp 1 b_matrix = np.array([[1], [-1]], dtype=float) # # exp2 # b_matrix = np.array([[1], [1]], dtype=float) print(a_matrix, b_matrix) R_mult_factor = 0.2 Q_matrix = np.eye(len(a_matrix[0]), dtype=float) u_dim = len(b_matrix[0]) R_matrix = R_mult_factor * np.eye(u_dim) print(a_matrix, b_matrix, Q_matrix, R_matrix) k_matrix = get_input(a_matrix, b_matrix, Q_matrix, R_matrix) print(k_matrix) # a_bk_matrix = a_matrix_ext - np.matmul(b_matrix_ext, k_matrix) a_bk_matrix = a_matrix - np.matmul(b_matrix, k_matrix) # print(a_bk_matrix) loc1.a_matrix = a_bk_matrix loc1.c_vector = np.array([0.0, 0.0], dtype=float) # print(a_bk_matrix) # loc1.a_matrix = np.array([[0.0, 2.0], [1.0, 0.0]], dtype=float) # loc1.c_vector = np.array([0.0, -9.81], dtype=float) error = ha.new_mode('_error') error.is_error = True usafe_set_constraint_list = [] if usafe_r is None: # exp 1 usafe_set_constraint_list.append(LinearConstraint([-1.0, 0.0], -2.0)) # exp 2 - Significant diff across equivalent and non-equivalent runs for p_intersect reverse # usafe_set_constraint_list.append(LinearConstraint([0.0, 1.0], -0.85)) else: usafe_star = init_hr_to_star(settings, usafe_r, ha.modes['_error']) for constraint in usafe_star.constraint_list: usafe_set_constraint_list.append(constraint) trans = ha.new_transition(loc1, error) for constraint in usafe_set_constraint_list: trans.condition_list.append(constraint) return ha, usafe_set_constraint_list