Batch scheduling is the process of planning the sequence and timing of batch operations within a production process to minimize idle time or maximize production, while accounting for factors such as intermediate storage, inventory, and demand. Mathematical optimization algorithms, including branch-and-bound based solvers and genetic algorithms (GA) can be employed to generate optimal or near-optimal schedules by considering these factors. The goal of this project is to compare stochastic and deterministic algorithms for solutions of batch scheduling problems formulated with semi-continuous variables. Semi-continuous variables, which can take the value of 0 or a value in a continuous range, are used to represent the state of a unit (active or inactive) while enforcing unit capacities and batch minimums. Disjunctive constraints are used to ensure tasks follow a feasible sequence, enforcing logical ‘or’ relationships such as unit exclusivity. Disjunctive constraints can be easily linearized by using Pyomo’s Generalized Disjunctive Programming extension. To evaluate the performance of these approaches, a multi-stage chemical production problem is considered. This problem involves two batch processes that share a single facility with multiple units, including a heater, reactors, and a separator. Feed stocks are unlimited, but intermediate storage is constrained, requiring careful coordination of material flow. The solver Gurobi was used through the Pyomo library in Python. While the deterministic method uses solvers that guarantee optimal schedules, these methods become computationally expensive as problem size increases. Genetic algorithms, on the other hand, simulate natural selection by starting with a population of possible solutions and iteratively improving them. The deterministic approach generates optimal schedules but scales poorly for larger time horizons, while the GA provides near-optimal solutions more efficiently. The two methods are compared based on schedule optimality and computational efficiency over a range of time horizons.