批處理作業排程-分支界限法
批處理作業排程-分支界限法
package test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class BatchJobSchedulingProblem {
public static void main(String[] arg) {
new BatchJobSchedulingProblem().branchAndBoundMethod();
}
public void branchAndBoundMethod() {
List<Task> taskList=new ArrayList<>();
taskList.add(new Task("J1",2,1));
taskList.add(new Task("J2",3,1));
taskList.add(new Task("J3",2,3));
Node root=new Node();
root.setT1(0);
root.setT2(0);
root.setSt(0);
for (Task task:taskList){
Node node=new Node();
node.setTask(task);
node.setT1(task.getA());
node.setT2(task.getA()+task.getB());
node.setSt(node.getT2());
root.getChildNodeList().add(node);
}
List<Node> nodeList=new ArrayList<>();
nodeList.add(root);
while (nodeList.size()>0){
addNode(nodeList.get(0),nodeList);
Collections.sort(nodeList, new Comparator<Node>() {
@Override
public int compare(Node o1, Node o2) {
return o1.getSt()-o2.getSt();
}
});
}
}
public void addNode(Node parentNode,List<Node> nodeList){
//移除活結點
nodeList.remove(parentNode);
int t1=parentNode.getT1();
int t2=parentNode.getT2();
int st=parentNode.getSt();
if (parentNode.getChildNodeList().size()==0){
//第一次執行到這裡時其實已經得到最優解
for (Task task:parentNode.getTaskList()){
System.out.print(task.getName()+",");
}
System.out.println();
System.out.println(parentNode.getSt());
return;
}
for (Node node:parentNode.getChildNodeList()){
Task task=node.getTask();
Node newNode=new Node();
int nextt1=t1+task.getA();
int nestt2=(t2-t1)>task.getA()?t2+task.getB():nextt1+task.getB();
newNode.setTask(task);
newNode.setT1(nextt1);
newNode.setT2(nestt2);
newNode.setSt(st+nestt2);
List<Task> newTaskList=new ArrayList<>();
newTaskList.addAll(parentNode.getTaskList());
newTaskList.add(task);
newNode.setTaskList(newTaskList);
List<Node> newChildNodeList=new ArrayList<>();
newChildNodeList.addAll(parentNode.getChildNodeList());
newChildNodeList.remove(node);
newNode.setChildNodeList(newChildNodeList);
nodeList.add(newNode);
}
}
class Node{
private Task task;
private int t1;
private int t2;
private int st;
private List<Node> childNodeList=new ArrayList<>();
private List<Task> taskList=new ArrayList<>();
public List<Node> getChildNodeList() {
return childNodeList;
}
public void setChildNodeList(List<Node> childNodeList) {
this.childNodeList = childNodeList;
}
public Task getTask() {
return task;
}
public void setTask(Task task) {
this.task = task;
}
public int getT1() {
return t1;
}
public void setT1(int t1) {
this.t1 = t1;
}
public int getT2() {
return t2;
}
public void setT2(int t2) {
this.t2 = t2;
}
public int getSt() {
return st;
}
public void setSt(int st) {
this.st = st;
}
public List<Task> getTaskList() {
return taskList;
}
public void setTaskList(List<Task> taskList) {
this.taskList = taskList;
}
}
class Task{
private String name;
private int a;
private int b;
public Task(String name, int a, int b) {
this.name = name;
this.a = a;
this.b = b;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
}
}
©著作權歸作者所有:來自51CTO部落格作者塞上名豬的原創作品,如需轉載,請註明出處,否則將追究法律責任
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3407/viewspace-2819480/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用FUTURE 中的訊息避免計劃排程的批處理作業 - CodeOpinion
- 【演算法】分支界限法演算法
- 作業系統4——處理機排程與死鎖作業系統
- 基於任務排程的企業級分散式批處理方案分散式
- Oracle排程作業引起的空間驟增問題處理記錄Oracle
- 3.1處理機排程概述
- 猿考研之作業系統篇二(處理機排程)作業系統
- 使用Kafka分割槽擴充套件Spring Batch大資料排程批處理 – ArnoldKafka套件SpringBAT大資料
- Java後端開發中的任務排程:使用Spring Batch實現批處理Java後端SpringBAT
- ORA-27492 無法執行作業,排程程式不可用
- 如何使用Rust的gaffer實現優先順序的微批處理排程器 - njkRust
- 作業系統課程設計——處理機和程式排程演算法及記憶體分配回收機制作業系統演算法記憶體
- oracle排程程式作業dbms_schedulerOracle
- oracle使用DBMS_SCHEDULER排程作業Oracle
- 2.2.1 處理機排程的概念及層次
- 批處理概述
- Apache Oozie 教程:使用 Oozie 排程 Hadoop 作業ApacheHadoop
- 作業系統之排程演算法作業系統演算法
- LOTO示波器動作程式設計功能(命令批處理)程式設計
- async-await:協作排程 vs 搶佔排程AI
- 實現Quartz.NET的HTTP作業排程quartzHTTP
- 作業系統精髓設計原理 程式排程作業系統
- GaussDB(DWS)應用實踐丨負載管理與作業排隊處理方法負載
- cmd批處理無法使用 提示windows找不到檔案Windows
- Apache Beam,批處理和流式處理的融合!Apache
- bat 批處理字串操作BAT字串
- Dynamics CRM 2013 批處理
- window 批處理檔案
- 什麼是批處理
- 【作業系統】4.程序排程演算法作業系統演算法
- .NET Core Hangfire週期性作業排程問題
- Elastic-job實戰(分散式作業排程框架)AST分散式框架
- 計算機作業系統處理機排程讀後感—–關於程式概念的剖析。從RING3到RING0(32位作業系統)計算機作業系統
- 一個實用批處理指令製作過程分享:Perforce更新完後開啟VisualStudio再編譯編譯
- 分支路徑圖排程框架在 vivo 效果廣告業務的落地實踐框架
- 使用持續整合工具Jenkins進行Kettle作業排程Jenkins
- 分散式後臺作業排程器JobRunr介紹 - JAXenter分散式
- Python批處理:檔案操作Python