|
|
@ -90,7 +90,7 @@ class TestResult: |
|
|
|
init_check_opt_avg: {self.init_check_opt_avg} |
|
|
|
""" |
|
|
|
def csv(self, ws=" "): |
|
|
|
return f"{self.init_check_pes_min:0.04f}{ws}{self.init_check_pes_max:0.04f}{ws}{self.init_check_pes_avg:0.04f}{ws}{self.init_check_opt_min:0.04f}{ws}{self.init_check_opt_max:0.04f}{ws}{self.init_check_opt_avg:0.04f}{ws}{self.safeStates}{ws}{self.unsafeStates}{ws}{self.policy_queries}" |
|
|
|
return f"{self.init_check_pes_min:0.04f}{ws}{self.init_check_pes_max:0.04f}{ws}{self.init_check_pes_avg:0.04f}{ws}{self.init_check_opt_min:0.04f}{ws}{self.init_check_opt_max:0.04f}{ws}{self.init_check_opt_avg:0.04f}{ws}{self.safe_states}{ws}{self.unsafe_states}{ws}{self.policy_queries}" |
|
|
|
|
|
|
|
def exec(command,verbose=True): |
|
|
|
if verbose: print(f"Executing {command}") |
|
|
@ -250,25 +250,21 @@ def statesFormulaTrimmed(states, name): |
|
|
|
formulas = list() |
|
|
|
for skiPosition, skiPos_group in skiPositionGroup.items(): |
|
|
|
formula = f"formula {name}_{skiPosition} = ( ski_position={skiPosition} & " |
|
|
|
firstVelocity = True |
|
|
|
#print(f"{name} ski_pos:{skiPosition}") |
|
|
|
velocityGroup = defaultdict(list) |
|
|
|
velocityFormulas = list() |
|
|
|
for item in skiPos_group: |
|
|
|
velocityGroup[item[3]].append(item) |
|
|
|
for velocity, velocity_group in velocityGroup.items(): |
|
|
|
if firstVelocity: |
|
|
|
firstVelocity = False |
|
|
|
else: |
|
|
|
formula += " | " |
|
|
|
#print(f"\tvel:{velocity}") |
|
|
|
formulasPerSkiPosition = list() |
|
|
|
formula += f" (velocity={velocity} & " |
|
|
|
firstY = True |
|
|
|
yPosGroup = defaultdict(list) |
|
|
|
yAndXRanges = dict() |
|
|
|
yFormulas = list() |
|
|
|
for item in velocity_group: |
|
|
|
yPosGroup[item[1]].append(item) |
|
|
|
for y, y_group in yPosGroup.items(): |
|
|
|
#print(f"\t\ty:{y}") |
|
|
|
sorted_y_group = sorted(y_group, key=lambda s: s[0]) |
|
|
|
#formula += f"( y={y} & (" |
|
|
|
current_x_min = sorted_y_group[0][0] |
|
|
|
current_x = sorted_y_group[0][0] |
|
|
|
x_ranges = list() |
|
|
@ -279,38 +275,15 @@ def statesFormulaTrimmed(states, name): |
|
|
|
x_ranges.append(f" ({current_x_min}<=x&x<={current_x})") |
|
|
|
current_x_min = state[0] |
|
|
|
current_x = state[0] |
|
|
|
x_ranges.append(f" ({current_x_min}<=x&x<={sorted_y_group[-1][0]})") |
|
|
|
xRangesDisjunction = createBalancedDisjunction(x_ranges) |
|
|
|
if xRangesDisjunction in yAndXRanges: |
|
|
|
yAndXRanges[xRangesDisjunction].append(y) |
|
|
|
else: |
|
|
|
yAndXRanges[xRangesDisjunction] = list() |
|
|
|
yAndXRanges[xRangesDisjunction].append(y) |
|
|
|
for xRange, ys in yAndXRanges.items(): |
|
|
|
#if firstY: |
|
|
|
# firstY = False |
|
|
|
#else: |
|
|
|
# formula += " | " |
|
|
|
sorted_ys = sorted(ys) |
|
|
|
if len(ys) == 1: |
|
|
|
formulasPerSkiPosition.append(f" ({xRange} & y={ys[0]})") |
|
|
|
continue |
|
|
|
current_y_min = sorted_ys[0] |
|
|
|
current_y = sorted_ys[0] |
|
|
|
y_ranges = list() |
|
|
|
for y in sorted_ys[1:]: |
|
|
|
if y - current_y == 2: |
|
|
|
current_y = y |
|
|
|
elif abs(y - current_y) > 2: |
|
|
|
y_ranges.append(f" ({current_y_min}<=y&y<={current_y})") |
|
|
|
current_y_min = y |
|
|
|
current_y = y |
|
|
|
y_ranges.append(f" ({current_y_min}<=y&y<={sorted_ys[-1]})") |
|
|
|
formulasPerSkiPosition.append(f" ({xRange} & ({createBalancedDisjunction(y_ranges)}))") |
|
|
|
|
|
|
|
formula += createBalancedDisjunction(formulasPerSkiPosition) |
|
|
|
formula += ")" |
|
|
|
formula += ");" |
|
|
|
x_ranges.append(f" {current_x_min}<=x&x<={sorted_y_group[-1][0]}") |
|
|
|
yFormulas.append(f" (y={y} & {createBalancedDisjunction(x_ranges)})") |
|
|
|
#x_ranges.clear() |
|
|
|
|
|
|
|
#velocityFormulas.append(f"(velocity={velocity} & {createBalancedDisjunction(yFormulas)})") |
|
|
|
velocityFormulas.append(f"({createBalancedDisjunction(yFormulas)})") |
|
|
|
#yFormulas.clear() |
|
|
|
formula += createBalancedDisjunction(velocityFormulas) + ");" |
|
|
|
#velocityFormulas.clear() |
|
|
|
formulas.append(formula) |
|
|
|
for i in range(1, num_ski_positions+1): |
|
|
|
if i in skiPositionGroup: |
|
|
|