Hi Laurent,
Thank for your response. I indeed see that AddMaxEquality() expects an array of variables.
I don't know if I am asking stupid questions, but I really don't know how to implement this. I've tried several 'solutions'.
1: By creating the array called intArr which will serve as an input for the AddMaxEquality.
# DueDate objective.
obj_var = model.NewIntVar(0, 100000, 'dueDate')
intArr = [all_tasks[job_id, len(job) - 1].end - all_tasks[job_id, len(job) - 1].deadline for job_id, job in enumerate(jobs_data)]
print(intArr)
model.AddMaxEquality(obj_var, intArr)
When I print intArr i get an array which contains SumArray(end_0_1(0..10151), ProductCst(deadline_0_1(28800), -1), 0)
When I do the same thing without the enumeration i get: (end_49_0 + -deadline_49_0)
2.1 : Adding a lateness_var
for job_id, job in enumerate(jobs_data):
for task_id, task in enumerate(job):
machine = task[0]
duration = task[1]
deadline = task[2]
suffix = '_%i_%i' % (job_id, task_id)
start_var = model.NewIntVar(0, horizon, 'start' + suffix)
end_var = model.NewIntVar(0, horizon, 'end' + suffix)
interval_var = model.NewIntervalVar(start_var, duration, end_var,
'interval' + suffix)
deadline_var = model.NewIntVar(deadline, deadline,
'deadline' + suffix)
lateness_var = model.NewIntVar(0, 100000,
'lateness' + suffix)
all_tasks[job_id, task_id] = task_type(start=start_var,
end=end_var, deadline=deadline_var,
interval=interval_var, lateness=lateness_var)
machine_to_intervals[machine].append(interval_var)
And trying to calculate the lateness using:
all_tasks[job_id, len(job) - 1].lateness = all_tasks[job_id, len(job) - 1].end - all_tasks[job_id, len(job) - 1].deadline
This gives AttributeError: can't set attribute
2.2: Adding a lateness_var
for job_id, job in enumerate(jobs_data):
for task_id, task in enumerate(job):
machine = task[0]
duration = task[1]
deadline = task[2]
suffix = '_%i_%i' % (job_id, task_id)
start_var = model.NewIntVar(0, horizon, 'start' + suffix)
end_var = model.NewIntVar(0, horizon, 'end' + suffix)
interval_var = model.NewIntervalVar(start_var, duration, end_var,
'interval' + suffix)
deadline_var = model.NewIntVar(deadline, deadline,
'deadline' + suffix)
#lateness_var = model.NewIntVar(0, 100000, 'lateness' + suffix)
lateness_var = end_var - deadline_var
all_tasks[job_id, task_id] = task_type(start=start_var,
end=end_var, deadline=deadline_var,
interval=interval_var, lateness=lateness_var)
machine_to_intervals[machine].append(interval_var)
This gives TypeError: NotSupported: model.GetOrMakeIndex((end_0_1 + -deadline_0_1))
I've tried more than this but still did not come up to a working solution. Help would be appreciated again.
Op woensdag 7 juli 2021 om 14:26:27 UTC+2 schreef Laurent Perron: