Saya mencoba memecahkan masalah penjadwalan dengan Python menggunakan docplex.cp.

Dalam masalah saya, saya memiliki batasan yang menyatakan bahwa jika variabel interval opsional yang diberikan ada, maka beberapa variabel interval opsional lainnya harus tidak ada.

Saya telah mencoba ini:

mdl.add( 
        mdl.if_then( 
                    mdl.presence_of(optional_interval_var1), 
                    mdl.equal(mdl.presence_of(optional_interval_var2), 0) 
                   ) 
       )

Tapi sepertinya tidak berhasil. Saya menemukan bahwa batasan ini tidak diterapkan dalam solusi yang disediakan oleh pemecah masalah.

0
Momafa 13 Mei 2021, 23:25

1 menjawab

Jawaban Terbaik

Anda dapat menggunakan <= antara kehadiranOf

Contohnya

from docplex.cp.model import *


model = CpoModel()

itvs1=interval_var(optional = True,
                             start = 1,
                             end   = 10)

itvs2=interval_var(optional = True,
                             start = 10,
                             end   = 15)


model.add(minimize(presence_of(itvs1)+presence_of(itvs2)))

#model.add(presence_of(itvs1)==1)

model.add(presence_of(itvs1)<=presence_of(itvs2))

# Solve the model
sol = model.solve(LogPeriod=1000000,trace_log=True)

res1=sol.get_var_solution(itvs1).is_present()
res2=sol.get_var_solution(itvs2).is_present()

print("itvs1 is present : ",res1)
print("itvs2 is present : ",res2)

Memberi

itvs1 is present :  False
itvs2 is present :  False

Tetapi jika Anda membatalkan komentar

#model.add(presence_of(itvs1)==1)

Maka Anda mendapatkan

itvs1 is present :  True
itvs2 is present :  True
0
Alex Fleischer 17 Mei 2021, 08:18