Studi mengenai penjadwalan telah dilakukan sejak tahun 80an. Penjadwalan sebagai sebuah kegiatan rutin yang harus dilakukan oleh setiap lembaga pendidikan merupakan tugas kunci yang menunjang kenyamanan dalam proses belajar-mengajar. Berbagai teknik dan algoritma pencarian pun dicoba untuk memecahkan permasalahan penjadwalan. Banyaknya kemungkinan solusi dari dari berbagai kombinasi variabel dan domain dalam permasalahan penjadwalan membuat permasalahan ini termasuk ke dalam permasalahan kombinatorial. Salah satu teknik yang digunakan untuk memecahkan permasalahan kombinatorial adalah Constraint Programming, yang memodelkan permasalahan yang ada dengan membatasi kemungkinan kombinasi nilai untuk setiap variabel. Kemudian solusi yang optimum dicari dengan menggunakan algoritma pencarian. Dalam Tugas Akhir ini, penjadwalan perkuliahan dalam Tugas Akhir ini dibuat untuk memenuhi kebutuhan penjadwalan perkuliahan di Fakultas Ilmu Komputer Universitas Indonesia (Fasilkom UI), khususnya program studi S1 Reguler. Proses penjadwalan dibagi ke dalam dua tahap, yang setiap tahapannya dimodelkan ke dalam Constraint Satisfaction Problem (CSP). Tahap pertama menangani masalah work allocation, yaitu pemetaan mata kuliah ke dosen. Sedangkan tahap yang kedua menangani masalah time tabling, yaitu pemetaan mata kuliah ke slot kuliah. Fungsi objektif dalam mencari solusi optimum (optimization) ditetapkan dalam setiap tahapan tersebut. Tahap pertama mengoptimisasi pemetaan mata kuliah ke dosen berdasarkan workload setiap dosen. Sedangkan tahap kedua mengoptimisasi pemetaan mata kuliah ke slot kuliah berdasarkan jumlah infocus yang tersedia di Fasilkom UI. Solusi yang optimum ini dicari dengan menggunakan algoritma pencarian Branch and Bound (B & B).