Error , Infeasible No value for uninitialized NumericValue object

27 views
Skip to first unread message

John Icare

unread,
Aug 20, 2019, 6:32:39 PM8/20/19
to Pyomo Developers

I'm trying to optmize a problem of clients/facility allocation and I'm using pyomo to do so. I have the following problem that appear and cannot solve it even if I initialize all the values of Model.z to 0; the problems is still infeasible

I got this error whatever I try and I don't understand why Z should be initialized as it is the variable I'm trying to minimize

from __future__ import division
import pyomo.environ as pyo
#from pyomo.environ import *
from pyomo.opt import SolverFactory
import sys
import numpy as np
import sys
import os

from time import perf_counter
from pulp import *
from pyomo.util.infeasible import log_infeasible_constraints

#print(sys.path)
opt
= pyo.SolverFactory('glpk')
opt
.options['threads'] =4


#import instance
model
= pyo.ConcreteModel()

# n is the number of facility related to J
# m is the number of clients related to I
# t is the number of periods relatdd to T
# H is the maximum number of clients that can be served

[m,n,t,H] = np.genfromtxt(fname = r'./Instances/data-100-10-4-3-0.txt', dtype = None, max_rows = 1)
f_values
= np.genfromtxt(fname = r'./Instances/data-100-10-4-3-0.txt', dtype = None, max_rows = 4,skip_header=1)
c_values
= np.genfromtxt(fname = r'./Instances/data-100-10-4-3-0.txt', dtype = None, skip_footer = 1,skip_header=5)
p_values
= np.genfromtxt(fname = r'./Instances/data-100-10-4-3-0.txt', dtype = None, skip_header=405)


model
.J = pyo.Set(initialize=[int(i)+1 for i in range(n)])
model
.T= pyo.Set(initialize=[int(i)+1 for i in range(t)])
model
.T.pprint()
model
.I = pyo.Set(initialize=[int(i)+1 for i in range(m)])
model
.H = pyo.Set(initialize=[int(i)+1 for i in range(H)])

# Generation of Subsets of all clients

client_list
= [int(i)+1 for i in range(100)]
list_H
= [int(i)+1 for i in range(H)]
possible_groups_of_clients
=[]
for i in list_H:
    possible_groups_of_clients
+= [list(elem) for elem in itertools.combinations(client_list,i)]

possible_groups_of_clients
= possible_groups_of_clients[0:5] #Only select the first 5 subsets


model
.K = pyo.Set(initialize=[int(i)+1 for i in range(len(possible_groups_of_clients))])

p_val
= np.zeros((len(model.K),len(model.J),len(model.T)))


for t in model.T:
    t
=t-1 #Pyomo starts at 1
   
for j in model.J:
        j
=j-1
        count
= 0
       
for k in possible_groups_of_clients:

           
#k=k+1
            c_sum
=0;
           
for p in k:
               
if t==0:
                    c_sum
= c_sum +c_values[p][j]
               
elif t==1:
                    c_sum
= c_sum +c_values[p+100][j]
               
elif t==2:
                    c_sum
= c_sum +c_values[p+200][j]
               
elif t==3:
                    c_sum
= c_sum +c_values[p+300][j]
           
#print(f_values[t][j])


            p_val
[count][j][t] = f_values[t][j]+ c_sum
            count
=count+1


model
.p_val = pyo.Param(model.K,model.J,model.T, initialize = lambda model,k,j,t: p_val[k-1][j-1][t-1])

#Matrice Aik

A
= [[0 for k in range(len(possible_groups_of_clients))]  for i in range(100)]
#model.p_val = pyo.Param(model.T,model.J,model.K, initialize = lambda model,t,j,k: A[t-1][j-1][k-1])
model
.A = pyo.Param(model.I, model.K, mutable= True,initialize= lambda model,i,k: A[i-1][k-1])

count
=1
for i in possible_groups_of_clients:

   
for k in range(100):
        k
=k+1
       
#print(k)
       
if k in i:
            model
.A[k,count]=1
       
else:
            model
.A[k,count]=0

    count
=count+1

model
.z = pyo.Var(model.K,model.J,model.T,initialize= 0,within=pyo.NonNegativeReals,bounds=(0,1))



a
=range(len(possible_groups_of_clients))
print(p_values)

# Minization of objective functions



# Constraint unique client
model
.uniq_client = pyo.Constraint(
        model
.I,
        rule
=lambda model, i: sum(model.A[i,k]*model.z[k,j,t] for t in model.T for j in model.J for k in model.K) == 1
   
)
model
.unique_service_groupclients = pyo.Constraint(
       model
.J, model.T,
        rule
=lambda model,j,t: sum(model.z[k,j,t] for k in model.K)<=1
   
)

model
.min_factory_perperiod = pyo.Constraint(
        model
.T,
        rule
=lambda model, t: sum(model.z[k,j,t] for j in model.J for k in model.K )>=p_values[t-1]
   
)



model
.obj = pyo.Objective(rule= lambda model:sum(model.p_val[k,j,t]*model.z[k,j,t] for t in model.T  for j in model.J for k in model.K ), sense= pyo.minimize)
model
.pprint()




sol = pyo.SolverFactory('glpk',).solve(model).write()

log_infeasible_constraints
(model)


# ==========================================================
# = Solver Results                                         =
# ==========================================================
# ----------------------------------------------------------
#   Problem Information
# ----------------------------------------------------------
Problem:
- Name: unknown
 
Lower bound: -inf
 
Upper bound: inf
 
Number of objectives: 1
 
Number of constraints: 145
 
Number of variables: 201
 
Number of nonzeros: 601
 
Sense: minimize



# ----------------------------------------------------------
#   Solver Information
# ----------------------------------------------------------
Solver:
- Status: ok
 
Termination condition: infeasible
 
Statistics:
   
Branch and bound:
     
Number of bounded subproblems: 0
     
Number of created subproblems: 0
 
Error rc: 0
 
Time: 0.008042335510253906
ERROR
: evaluating object as numeric value: z[1,1,1]
   
(object: <class 'pyomo.core.base.var._GeneralVarData'>)
   
No value for uninitialized NumericValue object z[1,1,1]
ERROR
: evaluating object as numeric value: 1.0 - (A[1,1]*z[1,1,1] +
A
[1,2]*z[2,1,1] + A[1,3]*z[3,1,1] + A[1,4]*z[4,1,1] + A[1,5]*z[5,1,1] +
A
[1,1]*z[1,2,1] + A[1,2]*z[2,2,1] + A[1,3]*z[3,2,1] + A[1,4]*z[4,2,1] +
A
[1,5]*z[5,2,1] + A[1,1]*z[1,3,1] + A[1,2]*z[2,3,1] + A[1,3]*z[3,3,1] +
A
[1,4]*z[4,3,1] + A[1,5]*z[5,3,1] + A[1,1]*z[1,4,1] + A[1,2]*z[2,4,1] +
A
[1,3]*z[3,4,1] + A[1,4]*z[4,4,1] + A[1,5]*z[5,4,1] + A[1,1]*z[1,5,1] +
A
[1,2]*z[2,5,1] + A[1,3]*z[3,5,1] + A[1,4]*z[4,5,1] + A[1,5]*z[5,5,1] +
A
[1,1]*z[1,6,1] + A[1,2]*z[2,6,1] + A[1,3]*z[3,6,1] + A[1,4]*z[4,6,1] +
A
[1,5]*z[5,6,1] + A[1,1]*z[1,7,1] + A[1,2]*z[2,7,1] + A[1,3]*z[3,7,1] +
A
[1,4]*z[4,7,1] + A[1,5]*z[5,7,1] + A[1,1]*z[1,8,1] + A[1,2]*z[2,8,1] +
A
[1,3]*z[3,8,1] + A[1,4]*z[4,8,1] + A[1,5]*z[5,8,1] + A[1,1]*z[1,9,1] +
A
[1,2]*z[2,9,1] + A[1,3]*z[3,9,1] + A[1,4]*z[4,9,1] + A[1,5]*z[5,9,1] +
A
[1,1]*z[1,10,1] + A[1,2]*z[2,10,1] + A[1,3]*z[3,10,1] + A[1,4]*z[4,10,1]
+ A[1,5]*z[5,10,1] + A[1,1]*z[1,1,2] + A[1,2]*z[2,1,2] + A[1,3]*z[3,1,2] +
A
[1,4]*z[4,1,2] + A[1,5]*z[5,1,2] + A[1,1]*z[1,2,2] + A[1,2]*z[2,2,2] +
A
[1,3]*z[3,2,2] + A[1,4]*z[4,2,2] + A[1,5]*z[5,2,2] + A[1,1]*z[1,3,2] +
A
[1,2]*z[2,3,2] + A[1,3]*z[3,3,2] + A[1,4]*z[4,3,2] + A[1,5]*z[5,3,2] +
A
[1,1]*z[1,4,2] + A[1,2]*z[2,4,2] + A[1,3]*z[3,4,2] + A[1,4]*z[4,4,2] +
A
[1,5]*z[5,4,2] + A[1,1]*z[1,5,2] + A[1,2]*z[2,5,2] + A[1,3]*z[3,5,2] +
A
[1,4]*z[4,5,2] + A[1,5]*z[5,5,2] + A[1,1]*z[1,6,2] + A[1,2]*z[2,6,2] +
A
[1,3]*z[3,6,2] + A[1,4]*z[4,6,2] + A[1,5]*z[5,6,2] + A[1,1]*z[1,7,2] +
A
[1,2]*z[2,7,2] + A[1,3]*z[3,7,2] + A[1,4]*z[4,7,2] + A[1,5]*z[5,7,2] +
A
[1,1]*z[1,8,2] + A[1,2]*z[2,8,2] + A[1,3]*z[3,8,2] + A[1,4]*z[4,8,2] +
A
[1,5]*z[5,8,2] + A[1,1]*z[1,9,2] + A[1,2]*z[2,9,2] + A[1,3]*z[3,9,2] +
A
[1,4]*z[4,9,2] + A[1,5]*z[5,9,2] + A[1,1]*z[1,10,2] + A[1,2]*z[2,10,2] +
A
[1,3]*z[3,10,2] + A[1,4]*z[4,10,2] + A[1,5]*z[5,10,2] + A[1,1]*z[1,1,3] +
A
[1,2]*z[2,1,3] + A[1,3]*z[3,1,3] + A[1,4]*z[4,1,3] + A[1,5]*z[5,1,3] +
A
[1,1]*z[1,2,3] + A[1,2]*z[2,2,3] + A[1,3]*z[3,2,3] + A[1,4]*z[4,2,3] +
A
[1,5]*z[5,2,3] + A[1,1]*z[1,3,3] + A[1,2]*z[2,3,3] + A[1,3]*z[3,3,3] +
A
[1,4]*z[4,3,3] + A[1,5]*z[5,3,3] + A[1,1]*z[1,4,3] + A[1,2]*z[2,4,3] +
A
[1,3]*z[3,4,3] + A[1,4]*z[4,4,3] + A[1,5]*z[5,4,3] + A[1,1]*z[1,5,3] +
A
[1,2]*z[2,5,3] + A[1,3]*z[3,5,3] + A[1,4]*z[4,5,3] + A[1,5]*z[5,5,3] +
A
[1,1]*z[1,6,3] + A[1,2]*z[2,6,3] + A[1,3]*z[3,6,3] + A[1,4]*z[4,6,3] +
A
[1,5]*z[5,6,3] + A[1,1]*z[1,7,3] + A[1,2]*z[2,7,3] + A[1,3]*z[3,7,3] +
A
[1,4]*z[4,7,3] + A[1,5]*z[5,7,3] + A[1,1]*z[1,8,3] + A[1,2]*z[2,8,3] +
A
[1,3]*z[3,8,3] + A[1,4]*z[4,8,3] + A[1,5]*z[5,8,3] + A[1,1]*z[1,9,3] +
A
[1,2]*z[2,9,3] + A[1,3]*z[3,9,3] + A[1,4]*z[4,9,3] + A[1,5]*z[5,9,3] +
A
[1,1]*z[1,10,3] + A[1,2]*z[2,10,3] + A[1,3]*z[3,10,3] + A[1,4]*z[4,10,3]
+ A[1,5]*z[5,10,3] + A[1,1]*z[1,1,4] + A[1,2]*z[2,1,4] + A[1,3]*z[3,1,4] +
A
[1,4]*z[4,1,4] + A[1,5]*z[5,1,4] + A[1,1]*z[1,2,4] + A[1,2]*z[2,2,4] +
A
[1,3]*z[3,2,4] + A[1,4]*z[4,2,4] + A[1,5]*z[5,2,4] + A[1,1]*z[1,3,4] +
A
[1,2]*z[2,3,4] + A[1,3]*z[3,3,4] + A[1,4]*z[4,3,4] + A[1,5]*z[5,3,4] +
A
[1,1]*z[1,4,4] + A[1,2]*z[2,4,4] + A[1,3]*z[3,4,4] + A[1,4]*z[4,4,4] +
A
[1,5]*z[5,4,4] + A[1,1]*z[1,5,4] + A[1,2]*z[2,5,4] + A[1,3]*z[3,5,4] +
A
[1,4]*z[4,5,4] + A[1,5]*z[5,5,4] + A[1,1]*z[1,6,4] + A[1,2]*z[2,6,4] +
A
[1,3]*z[3,6,4] + A[1,4]*z[4,6,4] + A[1,5]*z[5,6,4] + A[1,1]*z[1,7,4] +
A
[1,2]*z[2,7,4] + A[1,3]*z[3,7,4] + A[1,4]*z[4,7,4] + A[1,5]*z[5,7,4] +
A
[1,1]*z[1,8,4] + A[1,2]*z[2,8,4] + A[1,3]*z[3,8,4] + A[1,4]*z[4,8,4] +
A
[1,5]*z[5,8,4] + A[1,1]*z[1,9,4] + A[1,2]*z[2,9,4] + A[1,3]*z[3,9,4] +
A
[1,4]*z[4,9,4] + A[1,5]*z[5,9,4] + A[1,1]*z[1,10,4] + A[1,2]*z[2,10,4] +
A
[1,3]*z[3,10,4] + A[1,4]*z[4,10,4] + A[1,5]*z[5,10,4])
       
(object: <class 'pyomo.core.expr.numeric_expr.SumExpression'>)
   
No value for uninitialized NumericValue object z[1,1,1]
Traceback (most recent call last):
 
File "main.py", line 246, in <module>
    log_infeasible_constraints
(model)
 
File "/home/john/.local/lib/python3.6/site-packages/pyomo   /util/infeasible.py", line 25, in log_infeasible_constraints
   
if constr.equality and fabs(value(constr.lower - constr.body)) >= tol:
 
File "/home/john/.local/lib/python3.6/site-packages/pyomo/core/expr/numvalue.py", line 226, in value
    tmp
= obj(exception=True)
 
File "/home/john/.local/lib/python3.6/site-packages/pyomo/core/expr/numeric_expr.py", line 222, in __call__
   
return evaluate_expression(self, exception)
 
File "/home/john/.local/lib/python3.6/site-packages/pyomo/core/expr/visitor.py", line 973, in evaluate_expression
   
return visitor.dfs_postorder_stack(exp)
 
File "/home/john/.local/lib/python3.6/site-packages/pyomo/core/expr/visitor.py", line 518, in dfs_postorder_stack
flag
, value = self.visiting_potential_leaf(_sub)
 
File "/home/john/.local/lib/python3.6/site-packages/pyomo/core/expr/visitor.py", line 893, in visiting_potential_leaf
   
return True, value(node)
 
File "/home/john/.local/lib/python3.6/site-packages/pyomo/core/expr/numvalue.py", line 230, in value
% (obj.name,))
ValueError: No value for uninitialized NumericValue object z[1,1,1]

Siirola, John D

unread,
Aug 20, 2019, 6:36:07 PM8/20/19
to pyomo-de...@googlegroups.com

This mailing list is for discussing the development of the Pyomo code.  Please ask user / support questions on the pyomo-forum group.

 

Thank you,

john

--
You received this message because you are subscribed to the Google Groups "Pyomo Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pyomo-develope...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pyomo-developers/9d59a7d2-67c5-49ca-a751-4f71bbf99b3c%40googlegroups.com.

Reply all
Reply to author
Forward
0 new messages