亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Choco 求解器中的建模約束

Choco 求解器中的建模約束

慕尼黑5688855 2021-08-06 09:57:56
我正在使用 choco 求解器來解決一些任務調度問題。我有幾個工作和可能的插槽(可以執行一個工作)。有一些限制,例如:每個插槽只能有一個作業 (C.1)作業需要一定的時間t,槽有一個可用的持續時間d。工作必須適合可用的持續時間:t<=d(C.2)所以,基本上用一些基本/偽類表示:class Job {    int id;    int time;}class Slot {    int id;    int duration;}目前,我可以為每個工作分配一個插槽,假設一個工作的 id 和一個插槽是連續編號的int jobCount = 5;  // 5 jobs with ids from 0 to 4int slotCount= 20; // 20 jobs with ids from 0 to 19Model model = new Model("Example");IntVar[] jobs = model.intVarArray("Job", jobCount, 0, slotCount, false);// all jobs must have different slots (C.1)model.allDifferent(jobs).post();// solving - details omitted, because I think it is not relevant...Solution solution = model.getSolver().findSolution();// assign the jobs to the slots like (pseudo-code): // foreach i in jobs.length do //     job = getJobForId(i);//     getSlotForId(jobs[i]).setJob(job);這按預期工作。但現在我也想對其他約束進行建模。但我堅持如何將工作/插槽與時間/持續時間結合起來,因為時間和持續時間是一個因變量。第一步,我為時間和持續時間建模了兩個額外的變量:int[] slotDurations = {10, 20, 10, 40, ..., 20} // 20 durations (d)IntVar[] durations = model.intVarArray("Time", slotCount, slotDurations);int[] jobTimes = {5, 16, 30, 2, 17} // 5 times (t)IntVar[] times = model.intVarArray("Time", jobCount , jobTimes);現在,我需要表達時間應該適合持續時間(C.2)的約束。是否可以定義這樣的約束(無效/有效的偽代碼):for(int i=0;i<jobCount;i++){    times[i].le(durations[jobs[i]]).post();}還是模型完全錯誤?!也許有人有解決方案或想法?!
查看完整描述

1 回答

  • 1 回答
  • 0 關注
  • 248 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號