Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
Returns
-------
equilibria: A tuple.
"""
if np.min(A) <= 0:
A = A + abs(np.min(A)) + 1
if np.min(B) <= 0:
B = B + abs(np.min(B)) + 1
# build tableaux
col_tableau = make_tableau(A)
col_tableau = shift_tableau(col_tableau, A.shape)
row_tableau = make_tableau(B.transpose())
full_labels = set(range(sum(A.shape)))
if initial_dropped_label in non_basic_variables(row_tableau):
tableux = cycle((row_tableau, col_tableau))
else:
tableux = cycle((col_tableau, row_tableau))
# First pivot (to drop a label)
entering_label = pivot_tableau(next(tableux), initial_dropped_label)
while non_basic_variables(row_tableau).union(non_basic_variables(col_tableau)) != full_labels:
entering_label = pivot_tableau(next(tableux), next(iter(entering_label)))
row_strategy = tableau_to_strategy(row_tableau, non_basic_variables(col_tableau),
range(A.shape[0]))
col_strategy = tableau_to_strategy(col_tableau, non_basic_variables(row_tableau),
range(A.shape[0], sum(A.shape)))
initial_dropped_label: int
Returns
-------
equilibria: A tuple.
"""
if np.min(A) <= 0:
A = A + abs(np.min(A)) + 1
if np.min(B) <= 0:
B = B + abs(np.min(B)) + 1
# build tableaux
col_tableau = make_tableau(A)
col_tableau = shift_tableau(col_tableau, A.shape)
row_tableau = make_tableau(B.transpose())
full_labels = set(range(sum(A.shape)))
if initial_dropped_label in non_basic_variables(row_tableau):
tableux = cycle((row_tableau, col_tableau))
else:
tableux = cycle((col_tableau, row_tableau))
# First pivot (to drop a label)
entering_label = pivot_tableau(next(tableux), initial_dropped_label)
while non_basic_variables(row_tableau).union(non_basic_variables(col_tableau)) != full_labels:
entering_label = pivot_tableau(next(tableux), next(iter(entering_label)))
row_strategy = tableau_to_strategy(row_tableau, non_basic_variables(col_tableau),
range(A.shape[0]))