第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在 CPLEX 上基于另外兩個(gè)約束實(shí)現(xiàn)新約束?

如何在 CPLEX 上基于另外兩個(gè)約束實(shí)現(xiàn)新約束?

一只名叫tom的貓 2023-07-27 09:32:33
我對(duì) CPLEX 很陌生。我有這兩個(gè)約束(R 是 20 范圍內(nèi)的數(shù)字集):        model.add_constraints((model.sum(x[i, j] for j in R2 ) == 2 for i in R),"C1" )         model.add_constraints((x[i, n1-4] ==x[i, n1-2]  for i in R ),"C2" )我需要計(jì)算有多少i同時(shí)滿足 C1 和 C2,然后定義一個(gè)新約束,表示“至少有 10 個(gè) i 同時(shí)滿足 C1 和 C2”。我怎樣才能用 cplex 做到這一點(diǎn)?
查看完整描述

3 回答

?
郎朗坤

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊

在 Docplex 中,每個(gè)線性約束都可以用作一個(gè)表達(dá)式,其作用類似于布爾變量,如果滿足約束則等于 1,如果不滿足則等于 0。

請(qǐng)注意,當(dāng)添加到模型時(shí)(通過 Mode.add、Model.add_constraint(s)),約束將始終得到滿足。但是,您可以寫:

m.add( (x<=3) + (y>=5) >= 1)

這意味著至少滿足一個(gè)(可能是兩個(gè))約束 (x<=3) 和 (y>=5)。

在您的情況下,假設(shè)有一個(gè)包含 N 個(gè)約束 cts[i] 的數(shù)組,則編寫:

m.add( m.sum(cts) >= 10)

您還可以在目標(biāo)中使用這樣的表達(dá)式:

m.maximize(m.sum(cts))

將最大化滿足約束的數(shù)量

將確保其中至少 10 人滿意

注意:始終使用Model.sum,而不是 Pythonsum以避免性能問題。


查看完整回答
反對(duì) 回復(fù) 2023-07-27
?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

讓我舉一個(gè)動(dòng)物園里的例子

from docplex.mp.model import Model


# Data


Buses=[

? ? (40,500),

? ? (30,400),

? ? (35,450),

? ? (20,300)

? ? ]


nbKids=300


# Indexes


busSize=0;

busCost=1;


for b in Buses:

? ? print("buses with ",b[busSize]," seats cost ",b[busCost])


mdl = Model(name='buses')


#decision variables

mdl.nbBus=mdl.integer_var_dict(Buses,name="nbBus")


# Constraint

mdl.add_constraint(sum(mdl.nbBus[b]*b[busSize] for b in Buses) >= nbKids, 'kids')


# Objective

mdl.minimize(sum(mdl.nbBus[b]*b[busCost] for b in Buses))


mdl.solve()


# Display solution

for b in Buses:

? ? print(mdl.nbBus[b].solution_value," buses with ",b[busSize]," seats");


#Add a constraint

# Number of sizes where we have 1 or 2 buses should be at least 3


mdl.add(mdl.sum(mdl.logical_and(1<=mdl.nbBus[b],mdl.nbBus[b]<=2) for b in Buses) >=3)


mdl.solve()


# Display solution

for b in Buses:

? ? print(mdl.nbBus[b].solution_value," buses with ",b[busSize]," seats");

這使


buses with? 40? seats cost? 500

buses with? 30? seats cost? 400

buses with? 35? seats cost? 450

buses with? 20? seats cost? 300

5.0? buses with? 40? seats

1.0? buses with? 30? seats

2.0? buses with? 35? seats

0? buses with? 20? seats

4.0? buses with? 40? seats

1.0? buses with? 30? seats

2.0? buses with? 35? seats

2.0? buses with? 20? seats


查看完整回答
反對(duì) 回復(fù) 2023-07-27
?
慕虎7371278

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊

在以下代碼中,我創(chuàng)建了兩個(gè)包含 100 個(gè)整數(shù)變量的列表 xi 和 xj。


然后,我定義一個(gè)邏輯和約束列表ctands,當(dāng) xi[k]>=3 且 yi[k]>=5 時(shí)為 true。


然后我發(fā)布這些邏輯約束的總和恰好等于 10,這意味著必須滿足其中的 10 個(gè),因?yàn)槿魏渭s束都可以用作二進(jìn)制變量,滿足時(shí)等于 1。


目標(biāo)是最小化 xi 和 xj 的總和,因此結(jié)果如預(yù)期為 10 * 3 + 10*5 = 80


m = Model()

xi = m.integer_var_list(100, ub=10, name='xi')

xj = m.integer_var_list(100, ub=11, name='xj')


ctands = [((xi[k]>=3) + (xj[k]>=5)==2) for k in range(100)]

# version with logical_and

# ctands = [mdl.logical_and((xi[k]>=3), (xj[k]>=5)==2)) for k in range(100)]


#state that exactly 10 ands are true: the value of an and is 1 when true, 0 when false

m.add(m.sum(ctands) == 10)

# this minimize pulls xs and ys variables to 0

m.minimize(m.sum(xi) + m.sum(xj))

m.solve()

m.print_solution()


查看完整回答
反對(duì) 回復(fù) 2023-07-27
  • 3 回答
  • 0 關(guān)注
  • 197 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)