Tenho um problema de programação de inteiros mistos muito semelhante ao apresentado neste link. https://colab.research.google.com/github/ffraile/operations-research-notebooks/blob/main/docs/source/MIP/tutorials/PuLP%20and%20Python%20MIP%20Tutorial.ipynb#scrollTo=gA9VCegG8fXJ
Na solução do link, as variáveis de decisão 2-D são impressas na ordem:
# Print the value of the decision variables
for v in model.variables():
print(v.name, "=", v.varValue)
Entretanto, no meu caso envolvendo um grande número de variáveis de decisão, a ordem é um pouco distorcida.
Tentei as duas soluções possíveis para converter as variáveis em uma lista ou dicionário e classificá-las, mas nenhuma delas funcionou até agora.
# list
variables_list = [v for v in model.variables()]
variables_list.sort(key=lambda x:x.name)
# dictionary
variable_dict = {v.name: v.varValue for v in model.variables()}
sorted(variable_dict.items(), key = lambda x: x[0])
Qualquer sugestão será muito apreciada.
Sua solução também é classificada, mas alfanumericamente, porque seus nomes de variáveis são strings. Então,
_2
é maior que_19
porque_2
é maior que_1
. Isso aparece em sua solução porque você tem muito mais variáveisAtualize seu código para usar zeros à esquerda nos nomes de suas variáveis, então, em vez de
x_(10,_1)
andx_(10,_2)
você temx_(10,_01)
andx_(10,_02)
. Eles serão classificados na ordem que você espera.Se você precisar de mais variáveis, use números de três ou até quatro dígitos começando com
0001
,0002
, etc.