मेरे पास एक काफी बुनियादी मॉडल है जिसे मैं चलाने की कोशिश कर रहा हूं और मुझे निम्न त्रुटि संदेश मिल रहा है:

त्रुटि: मॉडल चलाते समय अप्रत्याशित अपवाद: एनएल लेखक ने अज्ञात मॉडल पर कई सक्रिय उद्देश्य कार्यों का पता लगाया है, लेकिन वर्तमान में केवल एक ही उद्देश्य को संभालता है।

उस त्रुटि को देखते हुए, मुझे लगता है कि CPLEX मेरे उद्देश्य कार्य को एक बहु-उद्देश्यीय समस्या के रूप में व्याख्या कर रहा है। मैं जो करने की कोशिश कर रहा हूं वह 'model.obj' को कम करना है जो सूचकांकों (i, j, t) पर परिभाषित है, लेकिन मुझे विश्वास नहीं है कि इसका मतलब यह होगा कि मेरे पास कई उद्देश्य कार्य हैं? उद्देश्य फ़ंक्शन नीचे समीकरण 11 के रूप में तैयार करने का प्रयास कर रहा है:

enter image description here

from __future__ import division
from pyomo.environ import *
from MPBFunctions import *
# Variable Initialization Matricies
susceptible_init = mpbdata(1,3,1,3)
inf_b4treat_init = mpbdata(1,3,13,15)


##########################################################################################################################
# Set Declaration
##########################################################################################################################
model = ConcreteModel()

Imax = 3
Jmax = 3
Tmax = 2
Kmax = 2
model.Iset = RangeSet(1,Imax)  # e.g. i = {1, 2, 3}
model.Jset = RangeSet(1,Jmax)
model.Tset = RangeSet(1,Tmax)
model.Kset = RangeSet(1,Kmax)
##########################################################################################################################
# Parameter Declaration
##########################################################################################################################


##########################################################################################################################
# Variable Declaration
##########################################################################################################################
model.susceptible = Var(model.Iset,model.Jset,model.Tset, initialize=initial_values(3,2,susceptible_init))
model.inf_b4treat = Var(model.Iset,model.Jset,model.Tset, initialize=initial_values(3,2,inf_b4treat_init))
model.inf_treated = Var(model.Iset,model.Jset,model.Tset)
model.level1 = Var(model.Iset,model.Jset,model.Tset,within=Binary)

##########################################################################################################################
# Objective Function
##########################################################################################################################
def objective_rule(model,i,j,t):
    return model.obj[i,j,t] == sum(2*model.inf_b4treat[i,j,t] for i in model.Iset for j in model.Jset for t in model.Tset)

model.damages = Objective(model.Iset, model.Jset, model.Tset, rule=objective_rule)

##########################################################################################################################
# Constraint Declaration w/ Imax=Jmax=Tmax = 3 and Kmax = 3
##########################################################################################################################

# Constraint 4: Susceptible recruitment
def susceptible_advance_rule(model, i, j, t):
    if t == Tmax:
        return Constraint.Skip
    else:
        return model.susceptible[i, j, t + 1] == model.susceptible[i, j, t] - model.inf_b4treat[i, j, t]

model.susceptible_advance = Constraint(model.Iset, model.Jset, model.Tset, rule=susceptible_advance_rule)

# Constraint 9: Treated Infestation
def treatment_rule(model, i, j, t):
    return model.inf_treated[i, j, t] == 0.20 * model.susceptible[i, j,t] * (1 - 0.15 * model.level1[i, j, t])

model.treated_pop = Constraint(model.Iset, model.Jset, model.Tset, rule=treatment_rule)
1
GrayLiterature 30 अगस्त 2019, 21:02

1 उत्तर

सबसे बढ़िया उत्तर

objective_rule फ़ंक्शन को एक अभिव्यक्ति वापस करनी चाहिए, आप एक समानता लौटा रहे हैं (जैसे कि यह एक बाधा थी)।

def objective_rule(model,i,j,t):
    return sum(2*model.inf_b4treat[i,j,t] for i in model.Iset for j in model.Jset for t in model.Tset)

यह भी दोबारा जांचें कि आपका इनपुट डेटा सही है।

1
Giorgio Balestrieri 6 सितंबर 2019, 08:08