Pemrograman integer

Masalah **pemrograman integer** adalah sebuah optimalisasi matematis atau program kelayakan yang di mana beberapa atau seluruh variabel terikat menjadi integer. Dalam banyak konteks, istilah ini merujuk pada "pemrograman linier integer" (PLI), di mana fungsi objektif dan ikatan (selain ikatan integer) adalah linear

Pemrograman integer adalah NP-lengkap. Secara khusus, kasus khusus dari pemrograman linear integer 0-1, di mana variabel yang tak diketahui adalah biner, dan hanya pembatasan yang harus dipenuhi adalah salah satu dari 21 masalah NP-lengkap Karp.

Jika beberapa variabel keputusan tidak diskrit, masalah tersebut dikenal sebagai masalah "pemrograman bilangan bulat campuran"

## Bentuk Standar dan Kanon PLI

Dalam pemrograman linear integer, *bentuk kanon* berbeda dari *bentuk standart*. Sebuah program linear integer dalam bentuk kanonisnya itu diekspresikan sehingga, (diingat bahwa ini adalah \mathbf{x} vektor yang akan ditentukan):

: \begin{align}
& \underset{\mathbf{x} \in \mathbb{Z}^n}{\text{memaksimalkan}}   && \mathbf{c}^\mathrm{T} \mathbf{x}\\
& \text{bergantung pada} && A \mathbf{x} \le \mathbf{b}, \\
&  && \mathbf{x} \ge \mathbf{0}
\end{align} 

dan bentuk standar PLI adalah

: \begin{align}
& \underset{\mathbf{x} \in \mathbb{Z}^n}{\text{maximize}}   && \mathbf{c}^\mathrm{T} \mathbf{x}\\
& \text{subject to} && A \mathbf{x} + \mathbf{s} = \mathbf{b}, \\
&  && \mathbf{s} \ge \mathbf{0}, \\
&  && \mathbf{x} \ge \mathbf{0},
\end{align} 

Di mana \mathbf{c}\in \mathbb{R}^n, \mathbf{b} \in \mathbb{R}^m adalah vektor dan A \in \mathbb{R}^{m \times n} adalah matriks. Dalam program linear, PLI tidak dalam bentuk standarnya bisa dikonversi menjadi bentuk standar dengan menghilangkan pertidaksamaan, mengenalkan pada variabel *slack* (\mathbf{s}) dan menggantikan variabel-variabel yang tidak dibatasi tanda dengan perbedaan dua variabel yang dibatasi tanda

## Contoh

Plot disamping menunjukkan masalah yang ada.

: \begin{align}
\underset{x,y \in \mathbb{Z}}{\text{memaksimalkan}} \quad & y \\
\text{bergantung pada} \quad &-x +y \leq 1  \\
            &3x + 2y \leq 12 \\
            &2x + 3y \leq 12 \\
            & x,y \ge 0
\end{align} 

Titik integer yang layak ditunjukkan dengan warna merah, garis putus-putus merah menunjukkan bagian cembung, yang bagian polihedron cembung terkecil yang memuat semua titik ini. Garis biru bersama dengan sumbu koordinat menentukan polihedron relaksasi LP, yang diberikan oleh pertidaksamaan tanpa kendala integralitas. Sasaran optimasi adalah untuk menggerakkan garis putus-putus hitam sejauh mungkin ke atas sambil tetap menentuh polihedron. Maka, solusi optimal dari masalah integer adalah titik  (1,2) dan (2,2) yang keduanya memiliki nilai objektif 2, Optimisasi unik relaksasi adalah (1.8,2.8) dengan nilai objektif 2.8. Jika solusi relaksasi dibulatkan ke integer terdekat, maka solusi tersebut tidak layak untuk PLI.

## Bukti NP-hardness
Berikut ini adalah pengurangan dari penutup vorteks minimum ke pemrograman integer yang akan berfungsi sebagai bukti kesulitan NP.

Jadikan G = (V,E) menjadi graf yang tak berarah. Definisikan program linear sebagai berikut:

: \begin{align}
      \min \sum_{v \in V} y_v \\
      y_v + y_u & \ge 1 && \forall u,v \in E\\
      y_v & \in \mathbb{Z^{+}} && \forall v \in V
\end{align}

Mengingat batasan tersebut membatasi y_v menjadi 0 atau 1, setiap solusi yang layak untuk program integer adalah bagian dari simpul. Batasan pertama menyiratkan bahwa setidaknya satu titik akhir dari setiap sisi disertakan dalam bagian ini. Oleh karena itu, slusi tersebut menggambarkan penutup simpul. Selain itu, mengingat beberapa penutup simpul C, y_v bisa menjadi bagian menjadi 1 untuk tiap v\in C dan menjadi 0 untuk setiap v\not\in C. Sehingga memberi solusi yang layak untuk program integer. Dengan demikian, maka dapat disimpulkan bahwa jika kita meminimalkan jumlah y_v, kita juga telah menemukan penutup titik sudut minimum.

## Referensi