Dynamic programming formulation



Similar documents
1.204 Lecture 10. Greedy algorithms: Job scheduling. Greedy method

Dynamic programming. Doctoral course Optimization on graphs - Lecture 4.1. Giovanni Righini. January 17 th, 2013

Approximation Algorithms

Chapter 15: Dynamic Programming

Scheduling Shop Scheduling. Tim Nieberg

Classification - Examples

Chapter Load Balancing. Approximation Algorithms. Load Balancing. Load Balancing on 2 Machines. Load Balancing: Greedy Scheduling

Outline. NP-completeness. When is a problem easy? When is a problem hard? Today. Euler Circuits

INTEGER PROGRAMMING. Integer Programming. Prototype example. BIP model. BIP models

5 INTEGER LINEAR PROGRAMMING (ILP) E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

Complexity Theory. IE 661: Scheduling Theory Fall 2003 Satyaki Ghosh Dastidar

! Solve problem to optimality. ! Solve problem in poly-time. ! Solve arbitrary instances of the problem. #-approximation algorithm.

SIMS 255 Foundations of Software Design. Complexity and NP-completeness

Scheduling Single Machine Scheduling. Tim Nieberg

Optimization Modeling for Mining Engineers

Offline sorting buffers on Line

! Solve problem to optimality. ! Solve problem in poly-time. ! Solve arbitrary instances of the problem. !-approximation algorithm.

Branch-and-Price Approach to the Vehicle Routing Problem with Time Windows

Compact Representations and Approximations for Compuation in Games

Why? A central concept in Computer Science. Algorithms are ubiquitous.

6.231 Dynamic Programming and Stochastic Control Fall 2008

Scheduling Home Health Care with Separating Benders Cuts in Decision Diagrams

A Branch and Bound Algorithm for Solving the Binary Bi-level Linear Programming Problem

CSC2420 Spring 2015: Lecture 3

Project and Production Management Prof. Arun Kanda Department of Mechanical Engineering Indian Institute of Technology, Delhi

Chapter 10: Network Flow Programming

Single machine models: Maximum Lateness -12- Approximation ratio for EDD for problem 1 r j,d j < 0 L max. structure of a schedule Q...

Near Optimal Solutions

CS/COE

Efficiency of algorithms. Algorithms. Efficiency of algorithms. Binary search and linear search. Best, worst and average case.

On the effect of forwarding table size on SDN network utilization

Measuring the Performance of an Agent

LINKED DATA STRUCTURES

Automated Scheduling Methods. Advanced Planning and Scheduling Techniques

Max Flow, Min Cut, and Matchings (Solution)

DATA ANALYSIS IN PUBLIC SOCIAL NETWORKS

Nonlinear Optimization: Algorithms 3: Interior-point methods

A Beam Search Heuristic for Multi-Mode Single Resource Constrained Project Scheduling

Algorithms and Data Structures

Discuss the size of the instance for the minimum spanning tree problem.

Introduction to LAN/WAN. Network Layer

Dynamic Programming. Lecture Overview Introduction

Problems, Methods and Tools of Advanced Constrained Scheduling

Data Structure [Question Bank]

2. (a) Explain the strassen s matrix multiplication. (b) Write deletion algorithm, of Binary search tree. [8+8]

Real Time Scheduling Basic Concepts. Radek Pelánek

Discrete Optimization

Sport Timetabling. Outline DM87 SCHEDULING, TIMETABLING AND ROUTING. Outline. Lecture Problem Definitions

Assembly line balancing to minimize balancing loss and system loss. D. Roy 1 ; D. Khan 2

Lecture 10: Regression Trees

Data Structures. Algorithm Performance and Big O Analysis

VEHICLE ROUTING PROBLEM

Chapter 13: Binary and Mixed-Integer Programming

Dynamic Vehicle Routing in MATSim

CS 2112 Spring Instructions. Assignment 3 Data Structures and Web Filtering. 0.1 Grading. 0.2 Partners. 0.3 Restrictions

Linear Programming Notes V Problem Transformations

SYSM 6304: Risk and Decision Analysis Lecture 5: Methods of Risk Analysis

Data Mining Practical Machine Learning Tools and Techniques

Cost Model: Work, Span and Parallelism. 1 The RAM model for sequential computation:

Application Survey Paper

CAD Algorithms. P and NP

Data Structures and Algorithms Written Examination

D1.1 Service Discovery system: Load balancing mechanisms

A Constraint-Based Method for Project Scheduling with Time Windows

Using Ant Colony Optimization for Infrastructure Maintenance Scheduling

Applied Algorithm Design Lecture 5

CMPSCI611: Approximating MAX-CUT Lecture 20

Lecture Outline Overview of real-time scheduling algorithms Outline relative strengths, weaknesses

Chapter 11: PERT for Project Planning and Scheduling

Data Structures and Algorithms

CS473 - Algorithms I

Bicolored Shortest Paths in Graphs with Applications to Network Overlay Design

Research Paper Business Analytics. Applications for the Vehicle Routing Problem. Jelmer Blok

Computer Algorithms. NP-Complete Problems. CISC 4080 Yanjun Li

Algebraic Computation Models. Algebraic Computation Models

Warshall s Algorithm: Transitive Closure

Introduction to Scheduling Theory

Arithmetic Coding: Introduction

IE 680 Special Topics in Production Systems: Networks, Routing and Logistics*

AI: A Modern Approach, Chpts. 3-4 Russell and Norvig

Sanjeev Kumar. contribute

Prescriptive Analytics. A business guide

Reinforcement Learning

System Interconnect Architectures. Goals and Analysis. Network Properties and Routing. Terminology - 2. Terminology - 1

The Union-Find Problem Kruskal s algorithm for finding an MST presented us with a problem in data-structure design. As we looked at each edge,

NP-completeness and the real world. NP completeness. NP-completeness and the real world (2) NP-completeness and the real world

CSE373: Data Structures and Algorithms Lecture 3: Math Review; Algorithm Analysis. Linda Shapiro Winter 2015

You are to simulate the process by making a record of the balls chosen, in the sequence in which they are chosen. Typical output for a run would be:

Lecture 2 February 12, 2003

CS104: Data Structures and Object-Oriented Design (Fall 2013) October 24, 2013: Priority Queues Scribes: CS 104 Teaching Team

Numerical Matrix Analysis

What mathematical optimization can, and cannot, do for biologists. Steven Kelk Department of Knowledge Engineering (DKE) Maastricht University, NL

A Working Knowledge of Computational Complexity for an Optimizer

The Trip Scheduling Problem

Transcription:

1.24 Lecture 14 Dynamic programming: Job scheduling Dynamic programming formulation To formulate a problem as a dynamic program: Sort by a criterion that will allow infeasible combinations to be eli minated effi ciently Choose granularity (integer scale or precision) that allows dominated subsequences to be pruned Choose coarsest granularity that works for your problem Use dynamic programming in fairly constrained problems with tight budgets and bounds If problem is not highly constrained, you will need to apply heuristic constraints to limit the search space Choose between multistage graph, set or custom implementation Decide if a sentinel is helpful in set implementation Experiment Every problem is a special case, since DP is O(2 n ) Can you find special structure that makes your DP fast? 1

DP examples This lecture shows another example Job scheduling, using multistage graph Example of sorting, feasibility, pruning used effectively Example of good software implementation No graph data structure built; solution tree built directly Good but not ideal representation of tree/graph nodes; some nodes are created but not used We don t even consider 2-D arrays, linked lists, etc., which do not scale at all, but which are popular in many texts. Crazy Good DP codes are somewhat hard to write; there is much detail to handle and many lurking inefficiencies to combat We will not dwell on the code details, but they are important Knapsack problem in next lecture, using sets Example of sorting, feasibility, pruning in different framework Multistage graph doesn t work: too many nodes per stage Object oriented design is big improvement over past codes Be careful: many texts have zillions of inefficient, tiny objects Job scheduling dynamic program Each job to be scheduled is treated as a project with a profit, time required, and deadline We have a single machine over a given time (resource) Use multistage graph formulation from last lecture Algorithm pseudocode: Sort jobs in deadline order (not profit order as in greedy) Build source node for job Consider each job in deadline order: Build set of nodes for next stage (job) for each state (time spent) For current job: Build arc with no time assigned to job If time so far + current job time <= job deadline, build arc with job done Build sink node for artificial last job Trace back solution using predecessor nodes 2

Job scheduling algorithm We will label every node in the graph that we encounter with its profit and time used If we find a better path to that node, we update its profit and time labels This is exactly the same as the shortest path label correcting algorithm We know this algorithm runs fast The issue is then: how big is the graph? A smart formulation keeps the graph size at some polynomial bound in the problem size Otherwise, the graph becomes exponentially large and this is why dynamic programming worst case is exponential If our model is good, we also need a good implementation A bad implementation can make a good model run very slowly (A good implementation can t really speed up a bad model ) Job scheduling example Job Deadline Profit Time 1 39 1 1 2 9 1 2 2 88 2 3 2 2 1 4 3 3 3 5 3 25 2 6 4 1 4 time units of machine time available. 3

V(,) Job scheduling graph: forward 1 6 V(1,) V(2,) V(3,) E(2,)= E(3,)= 1 6 11 39 9 1 9 V(1,1) V(2,1) V(3,1) E(2,)= E(3,)= 2 12 129 2 129 8 V(1,2) V(2,2) V(3,2) 3 8 E(3,)= 13 V(1,3) V(2,3) 4 9 V(3,3) 14 V pred V(1,4) V(2,4) 5 1 V(3,4) 15 Stage: 1 2 3 Job decision Job 1 decision Job 2 decision Profit: 39 Profit: 9 Profit: 88 Time: 1 Time: 1 Time: 2 Deadline: 1 Deadline: 2 Deadline: 2 V(,) Job scheduling graph: backward 1 6 V(1,) V(2,) V(3,) E(2,)= E(3,)= 1 6 11 39 9 1 9 V(1,1) V(2,1) V(3,1) E(2,)= E(3,)= 2 12 129 2 129 8 V(1,2) V(2,2) V(3,2) 3 8 E(3,)= 13 V pred V(1,3) V(2,3) V(3,3) 4 9 14 V(1,4) V(2,4) 5 1 V(3,4) 15 Stage: 1 2 3 Job decision Job 1 decision Job 2 decision Profit: 39 Profit: 9 Profit: 88 Time: 1 Time: 1 Time: 2 Deadline: 1 Deadline: 2 Deadline: 2 4

Job class public class Job implements Comparable { int jobnbr; // Package access int deadline; // Package access int profit; // Package access int time; // Package access public Job(int j, int d, int p, int t) { jobnbr= j; deadline= d; profit= p; time= t; public int compareto(object other) { Job o= (Job) other; if (deadline < o.deadline) return -1; else if (deadline > o.deadline) return 1; else return ; public String tostring() { return("j: "+ jobnbr+" D: "+ deadline+" P: "+ profit+" T: "+ time); JobScheduler public class JobScheduler { private Job[] jobs; // Input set of jobs to schedule private int nbrjobs; // Number of input jobs private int endtime; // Latest end time of job (=max resource) private int[] path; // List of nodes in the optimal solution private int jobsdone; // Output: total number of jobs private int totalprofit; // Output private int nodes; // Nodes generated in DP graph private int[] nodeprofit; // Profit of jobs prior to this node private int[] nodetime; // Time spent on jobs prior to node private int[] pred; // Predecessor node with best profit private int stagenodes; // Difference in node numbers from // one stage to next 5

JobScheduler constructor, jsd() public JobScheduler(Job[] j, int e) { jobs = j; endtime = e; nbrjobs= jobs.length; path= new int[nbrjobs+1]; nodes= (nbrjobs-1)*(endtime+1)+2; // nodes= stages*states + source, sink nodeprofit= new int[nodes]; nodetime= new int[nodes]; pred= new int[nodes]; for (int i= ; i < nodes; i++) pred[i]= -1; stagenodes= endtime+1; public void jsd() { buildsource(); buildcenter(); buildsink(); backpath(); buildsource() private void buildsource() { nodeprofit[]= ; // Source is node nodetime[]= ; // Treat stage as special case because it has only 1 node // If job not in solution set ( time and profit). nodeprofit[1]= ; nodetime[1]= ; pred[1]= ; // If job feasible if (jobs[].time <= jobs[].deadline) { int tonode= 1+ jobs[].time; time; nodeprofit[tonode]= jobs[].profit; nodetime[tonode]= jobs[].time; pred[tonode]= ; 6

buildcenter() private void buildcenter() { for (int stage= 1; stage < nbrjobs-1; stage++) { // Generate virtual arcs for (int node=(stage-1)*stagenodes+1; node<= stage*stagenodes;node++) if (pred[node] >= ) { // If job not in solution,build arc if it is on optimal sequence if (nodeprofit[node] >= nodeprofit[node+stagenodes]) { nodeprofit[node+stagenodes]= nodeprofit[node]; nodetime[node+stagenodes]= nodetime[node]; pred[node+stagenodes]= node; // If job feasible build virtual arc if it is on optimal sequence if (nodetime[node]+jobs[stage].time <= jobs[stage].deadline) { int nextnode= node + stagenodes + jobs[stage].time; time; if (nodeprofit[node]+jobs[stage].profit>=nodeprofit[nextnode]){ nodeprofit[nextnode]= nodeprofit[node]+ jobs[stage].profit; nodetime[nextnode]= nodetime[node]+ jobs[stage].time; pred[nextnode]= node; buildsink() private void buildsink() { int stage= nbrjobs - 1; int sinknode= (nbrjobs-1)*stagenodes + 1; for (int node=(stage-1)*stagenodes+1; node <= stage*stagenodes; node++) if (pred[node] >= ) { // Generate only single best virtual arc from previous node // Job feasible if (nodetime[node] + jobs[stage].time <= jobs[stage].deadline) { // Job in solution if (nodeprofit[node]+ jobs[stage].profit >= nodeprofit[sinknode]) { nodeprofit[sinknode]= nodeprofit[node]+ jobs[stage].profit; nodetime[sinknode]= nodetime[node]+ jobs[stage].time; pred[sinknode]= node; // Job not in solution if (nodeprofit[node] >= nodeprofit[sinknode]) { nodeprofit[sinknode]= nodeprofit[node]; nodetime[sinknode]= nodetime[node]; pred[sinknode]= node;

backpath(), outputjobs() private void backpath() { // Trace back predecessor nodes from sink to source path[nbrjobs]= (nbrjobs-1)*stagenodes + 1; // Sink node for (int stage= nbrjobs-1; stage >= 1; stage--) path[stage]= pred[path[stage+1]]; public void outputjobs() { System.out.println("Jobs done:"); for (int stage= ; stage < nbrjobs; stage++) { if (nodeprofit[path[stage]]!= nodeprofit[path[stage+1]]) { System.out.println(jobs[stage]); jobsdone++; totalprofit += jobs[stage].profit; System.out.println("\nJobs done: " + jobsdone + " total profit: "+ totalprofit); main() public static void main(string[] args) { Job[] jobs= new Job[]; jobs[]= new Job(, 1, 39, 1); jobs[1]= new Job(1, 2, 9, 1); jobs[2]= new Job(2, 2, 88, 2); jobs[3]= new Job(3, 2, 2, 1); jobs[4]= new Job(4, 3, 3, 3); jobs[5]= new Job(5, 3, 25, 2); jobs[6]= new Job(6, 4,, 1); int endtime= 4; Arrays.sort(jobs); // In deadline order JobScheduler j= new JobScheduler(jobs, endtime); j.jsd(); jsd(); j.outputjobs(); 8

Job scheduling DP complexity Complexity is minimum of: O(nM), where n is number of jobs (stages) M is min( p i, t i, d i ) O(2 n ) Intuitively, if no pruning occurs and the time resource is large, the number of nodes can double at each stage (job) This leads to O(2 n ) complexity If the times, deadlines or profits are constrained, many fewer nodes are generated This leads to O(nM) complexity Example uses of job scheduling Transportation vehicle fleet maintenance Many vehicles, many jobs with priority and benefit Routine or scheduled maintenance Accident repair Upgrades Manufacturing facility scheduling Marketing requirement for production of products with expected profit margins, deadlines and times Facilities making a range of products (e.g., in China) Robotics: control of real-time tasks Taxi dispatch (with extensions) 9

Other dynamic programming examples Most resource allocation problems are solved with linear programming Sophisticated solutions use integer programming now DP is used with nonlinear costs or outputs, often in process industries (chemical, etc.) with continuous but complex and expensive output DP for resource allocation has dimensionality curse when there is more than one resource: Have triplets of (cost, time, profit) for example, instead of pair of (cost, profit) Our job scheduling DP is a nice exception Dynamic programming is also used in: Production control Markov models of systems Financial portfolio management (risk management) Multi player game solutions! Reliability design D D 1 D 2 D n-1 D D D 1 D 1 D D 1 D 2 D n-1 D 2 D n-1 D 2 D n-1 D 2 Multiple devices are used at each stage. Monitors determine which devices are functioning properly. We wish to obtain maximum reliability within a cost constraint 1

Reliability design formulation If a stage i contains m i devices D i : Probability that all have a fault = (1-r i ) mi Reliability of stage y i = 1 (1-r i ) mi We want to maximize reliability= n Subject to a cost constraint: n m i c m C i i 1, and it integer mi (1 (1 r ) ) We need a more flexible representation: sets (but of a different sort that our Set class) i Reliability design example Device D D1 D2 Device type Input buffer Processor Output buffer Cost $3 $15 $2 Reliability.9.8.5 Maximum cost= $15 11

V(,) Reliability design conceptual graph.9 V(1,3) 1.99 V(1,6) 2.999 V(1,9) Max = $ Must have at 6 11 12 8 13 14 Rel Pred Stage: 1 2 D decision D 1 decision D 2 decision Cost: $3 Cost: $15 Cost: $2 Reliability:.9 Reliability:.8 Reliability:.5 15 16 V(,) Rel Pred Reliability design conceptual graph.9 V(1,3) 1.99 V(1,6) 2.999 V(1,9) Max = $ Must have at E(1,1)=.8.2 1 V(2,45) 6.864 1 V(2,6).892 1 V(2,5) 8 Max = $85 Must have at Stage: 1 2 D decision D 1 decision D 2 decision Cost: $3 Cost: $15 Cost: $2 Reliability:.9 Reliability:.8 Reliability:.5 11 12 13 14 15 16 12

V(,) Rel Pred Reliability design conceptual graph.9 V(1,3) 1.99 V(1,6) 2.999 V(1,9) Max = $ Must have at E(1,1)=.8.2 1 V(2,45) 6.864 1 V(2,6).892 1 V(2,5) 8.92 2 Dominated-label correction Max = $85 Must have at Stage: 1 2 D decision D 1 decision D 2 decision Cost: $3 Cost: $15 Cost: $2 Reliability:.9 Reliability:.8 Reliability:.5 11 12 13 14 15 16 V (,) Rel Pred Reliability design conceptual graph.9.2 1.36 6 V(1,3) V(2,45) V(3,65 E(1,1)=.8 E(2,1)=.5 1 6 11.99.864 1.432 V(1,6) V(2,6) V(3,8 E(2,1)=.5 2 12.999 V(1,9) Max = $ Must have at Stage: 1 2.892 1.54 6 V(2,5) V(3,85 8 13.92 2.446 8 Dominated V(3,95 14 Max = $85.648 Must have at V(3,1) 15 D decision D 1 decision D 2 decision Cost: $3 Cost: $15 Cost: $2 Reliability:.9 Reliability:.8 Reliability:.5.63 6 16 V(3,15) 13

V(,) Rel Pred Reliability design conceptual graph.9.2 1.36 6 V(1,3) V(2,45) V(3,65 E(1,1)=.8 E(2,1)=.5 1 6 11.99.864 1.432 V(1,6) V(2,6) V(3,8 E(2,1)=.5 2 12.999 V(1,9) Max = $ Must have at.892 1.54 6 V(2,5) V(3,85 8 13 Dominated.92 2.446 8 Dominated V(3,95 14 Max = $85.648 Must have at V(3,1) 15 Stage: 1 2 D decision D 1 decision D 2 decision Cost: $3 Cost: $15 Cost: $2 Reliability:.9 Reliability:.8 Reliability:.5 Dominated.63 6 16 V(3,15) Reliability DP needs different data structure Explosion of number of nodes Dominance is a more general concept than label correction Nodes with lower reliability but higher cost are pruned This is necessary to prune most dynamic programming graphs Heuristics are usually used Asymptotic analysis is not very helpful any more Most problems are O(min( graph size, 2 n )) Approaches with similar worst cases can have very different actual running times. Must experiment. Next time we ll cover the set implementation for dynamic programming We get rid of the nodes as well as the graph! 14

Things to notice in this formulation Sorting We didn t sort in the example, but in real problem it s always worth doing Almost always sort by benefit/cost ratio to get dominance In this problem, sort by failure probability/cost Having redundancy in cheap components with high failure rate is likely to be the most effective strategy Sorting replaces many ad-hoc heuristics, gives same effect There is no sink node There are tricks to avoid solving the last stage see see text Heuristics Prune at each stage based on benefit/cost ratio. Eliminate the states with small improvements over the preceding state Load obvious solution elements into the source node via heuristic E.g in knapsack, load first 5 of expected 1 items in profit/weight order If you need to do these things, branch and bound is better approach 15

MIT OpenCourseWare http://ocw.mit.edu 1.24 Computer Algorithms in Systems Engineering Spring 21 For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.