批處理作業排程-分支界限法
批處理作業排程-分支界限法
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 批處理作業排程問題
- 【作業系統】--處理器排程作業系統
- 作業系統(5)處理器排程管理作業系統
- 使用FUTURE 中的訊息避免計劃排程的批處理作業 - CodeOpinion
- 【演算法】分支界限法演算法
- 作業系統4——處理機排程與死鎖作業系統
- 基於任務排程的企業級分散式批處理方案分散式
- 作業系統(Linux)--按優先數排程演算法實現處理器排程作業系統Linux演算法
- Oracle排程作業引起的空間驟增問題處理記錄Oracle
- 3.1處理機排程概述
- 作業排程模擬程式
- Hadoop - Azkaban 作業排程Hadoop
- 猿考研之作業系統篇二(處理機排程)作業系統
- Hadoop作業排程機制Hadoop
- 使用Kafka分割槽擴充套件Spring Batch大資料排程批處理 – ArnoldKafka套件SpringBAT大資料
- ORA-27492 無法執行作業,排程程式不可用
- oracle排程程式作業dbms_schedulerOracle
- oracle使用DBMS_SCHEDULER排程作業Oracle
- Oracle事件驅動的排程作業Oracle事件
- Android 5.0的排程作業JobSchedulerAndroid
- Oracle 排程程式作業( dbms_scheduler )Oracle
- 作業系統排程演算法作業系統演算法
- Java後端開發中的任務排程:使用Spring Batch實現批處理Java後端SpringBAT
- Windows批處理學習(二)——批處理(3)薦Windows
- 批處理框架框架
- JDBC 批處理JDBC
- 碎片批處理
- 批處理命令
- 批處理概述
- 作業系統課程設計——處理機和程式排程演算法及記憶體分配回收機制作業系統演算法記憶體
- 如何使用Rust的gaffer實現優先順序的微批處理排程器 - njkRust
- 作業系統之排程演算法作業系統演算法
- 實驗二 作業模擬排程程式
- Net作業排程(二) -CrystalQuartz遠端管理quartz
- 0512作業系統之程式排程作業系統
- LOTO示波器動作程式設計功能(命令批處理)程式設計
- 2.2.1 處理機排程的概念及層次
- OS學習筆記三:處理器排程筆記