Вы можете превратить модель в список и отсортировать ее по своему усмотрению:
from z3 import *
v = [Real('v_%s' % (i+1)) for i in range(10)]
s = Solver()
for i in range(10):
s.add(v[i] == i)
if s.check() == sat:
m = s.model()
print (sorted ([(d, m[d]) for d in m], key = lambda x: str(x[0])))
Это печатает:
[(v_1, 0), (v_10, 9), (v_2, 1), (v_3, 2), (v_4, 3), (v_5, 4), (v_6, 5), (v_7, 6), (v_8, 7), (v_9, 8)]
Обратите внимание, что имена отсортированы лексикографически, поэтому v_10
следует после v_1
и до v_2
. Если вы хотите, чтобы v_10
пришел в конце, вы можете выполнить дальнейшую обработку в соответствии с вашими потребностями.