LAMPIRAN KODE PROGRAM
1. proses.php
function rotasi_operator($array_nilai) { $temp = 0;
$counter_index = 0;
for ($i = 0; $i < count($array_nilai); $i++) { $array_nilai_temp = $array_nilai; if (($counter_index) < count($array_nilai) - 1) { $temp = $array_nilai_temp[$counter_index]; $array_nilai_temp[$counter_index] = $array_nilai_temp[$counter_index + 1]; $array_nilai_temp[$counter_index + 1] = $temp; $hasil[] = $array_nilai_temp; } else { $temp = $array_nilai_temp[0]; $array_nilai_temp[0] = $array_nilai_temp[count($array_nilai) - 1]; $array_nilai_temp[count($array_nilai) - 1] = $temp; $hasil[] = $array_nilai_temp; } $counter_index++; } return $hasil; }
2. database.php
function konfigurasi_item($id_user) {//kosongkan tabel_temp_barang, karena isinya harus dinamis mysql_query("DELETE FROM tabel_temp_barang WHERE
id_user=$id_user") or die("Kosongkan tabel_temp_barang : " . mysql_error());
mysql_query("DELETE FROM tabel_barang_sisa WHERE
id_user=$id_user") or die("Kosongkan tabel_temp_barang : " . mysql_error());
// mysql_query(" TRUNCATE TABLE tabel_temp_barang") or die("Kosongkan Temp : " . mysql_error());
//untuk ruangan
$q_ruangan = mysql_query("SELECT * FROM tabel_ukuran_ruangan WHERE id_user=$id_user") or die(mysql_error());
$row_ruangan = mysql_fetch_array($q_ruangan); $panjang_ruangan = $row_ruangan ['panjang']; $tinggi_ruangan = $row_ruangan ['tinggi']; $lebar_ruangan = $row_ruangan ['lebar']; $x_nol_ruangan = -$panjang_ruangan / 2; $y_nol_ruangan = -$tinggi_ruangan / 2; $z_nol_ruangan = -$lebar_ruangan / 2; $x_max_ruangan = $panjang_ruangan / 2; $y_max_ruangan = $tinggi_ruangan / 2; $z_max_ruangan = $lebar_ruangan / 2; @$x_sekarang = $x_nol_ruangan; @$y_sekarang = $y_nol_ruangan;
@$z_sekarang = $z_nol_ruangan; $hc = hill_climbing($id_user); // print_r($hc);
for ($i = 0; $i < count($hc); $i++) { $id = $hc[$i][0];
$q_kotak = mysql_query("SELECT * FROM tabel_barang WHERE id_barang=$id") or die("tampil tabel_barang : " .
mysql_error());
while ($row = mysql_fetch_array($q_kotak)) { $id_barang = $row['id_barang']; $panjang = $row['panjang']; $tinggi = $row['tinggi']; $lebar = $row['lebar']; $berat = $row['berat']; $id_kotak = $row['id_barang']; //informasi barang saat ini yang diproses
$informasi_barang = pengaturan_barang($id_user, $panjang, $tinggi, $lebar, $berat, $id_kotak);
if ($informasi_barang != 0) { @$kotak[] = array(
id => $id_barang,
sp_size => $panjang . " x " . $tinggi . " x " . $lebar, sp_size_1 => $panjang, sp_size_2 => $tinggi, sp_size_3 => $lebar, x_origin_in_bin => $informasi_barang[0], y_origin_in_bin => $informasi_barang[1], z_origin_in_bin => $informasi_barang[2], constraints => 0 ); } } } // echo json_encode(@$kotak); return json_encode(@$kotak); } function konfigurasi_ruangan($id_user) {
$q_ruangan = mysql_query("SELECT * FROM tabel_ukuran_ruangan WHERE id_user=$id_user") or die(mysql_error());
$row_ruangan = mysql_fetch_array($q_ruangan); return json_encode(array($row_ruangan['panjang'], $row_ruangan['tinggi'], $row_ruangan['lebar'])); }
function pengaturan_barang($id_user, $panjang, $tinggi, $lebar, $berat, $id_kotak) {
$q_ruangan = mysql_query("SELECT * FROM tabel_ukuran_ruangan WHERE id_user=$id_user") or die(mysql_error());
$row_ruangan = mysql_fetch_array($q_ruangan);
$panjang_ruangan_min = -$row_ruangan ['panjang'] / 2; $tinggi_ruangan_min = -$row_ruangan ['tinggi'] / 2;
$lebar_ruangan_min = -$row_ruangan ['lebar'] / 2; $panjang_ruangan_max = $row_ruangan ['panjang'] / 2; $tinggi_ruangan_max = $row_ruangan ['tinggi'] / 2; $lebar_ruangan_max = $row_ruangan ['lebar'] / 2;
if ($panjang <= $panjang_ruangan_max - ($panjang_ruangan_min) && $tinggi <= ($tinggi_ruangan_max - ($tinggi_ruangan_min)) && $lebar <= ($lebar_ruangan_max - ($lebar_ruangan_min))) {
$q_cek_temp = mysql_query("SELECT * FROM tabel_temp_barang WHERE id_user=$id_user") or die("cek temp kotak : " .
mysql_error());
if (mysql_num_rows($q_cek_temp) > 0) {
$hasil = keatas($id_user, $panjang, $tinggi, $lebar, $berat, $panjang_ruangan_max, $tinggi_ruangan_max, $lebar_ruangan_max, $id_kotak); if (is_array($hasil)) { $x = $hasil[0]; $y = $hasil[1]; $z = $hasil[2]; } else {
$hasil = kesamping($id_user, $panjang, $tinggi, $lebar, $berat, $panjang_ruangan_max, $tinggi_ruangan_max, $lebar_ruangan_max, $id_kotak); if (is_array($hasil)) { $x = $hasil[0]; $y = $hasil[1]; $z = $hasil[2]; } else {
$hasil = kedalam($id_user, $panjang, $tinggi, $lebar, $berat, $panjang_ruangan_max, $tinggi_ruangan_max, $lebar_ruangan_max, $id_kotak); if (is_array($hasil)) { $x = $hasil[0]; $y = $hasil[1]; $z = $hasil[2]; } else {
//jika sudah penuh
mysql_query("INSERT INTO tabel_barang_sisa(id_barang, id_user, panjang, tinggi, lebar, berat) VALUES($id_kotak, $id_user, $panjang, $tinggi, $lebar, $berat)") or die("Error Insert Kotak sisa :" . mysql_error());
// break; }
} } } else {
$hasil = kotak_pertama($id_user, $panjang, $tinggi, $lebar, $panjang_ruangan_min, $tinggi_ruangan_min, $lebar_ruangan_min, $berat, $id_kotak);
$x = $hasil[0]; $y = $hasil[1]; $z = $hasil[2]; }
if (isset($x) && isset($y) && isset($z)) { return Array($x, $y, $z);
} else {
//kembalikan 0 untuk dicek, agara tidak ditambah pada array posisi kotak
return 0; }
} else {
mysql_query("INSERT INTO tabel_barang_sisa(id_user, panjang, tinggi, lebar, berat) VALUES($id_user, $panjang, $tinggi, $lebar, $berat)") or die("Error Insert Kotak sisa :" . mysql_error()); }
} /*
* panjang <= panjang sebelumnya * lebar <= lebar sebelumnya * total panjang <= l
* total tinggi <= tinggi ruang * total lebar <= lebar ruang *
* update atas sebelumnya F * y tambah
* x tetap * z tetap */
function keatas($id_user, $panjang, $tinggi, $lebar, $berat, $panjang_ruangan_max, $tinggi_ruangan_max, $lebar_ruangan_max, $id_kotak) {
$q_cek_atas = mysql_query("SELECT * FROM tabel_temp_barang WHERE id_user=$id_user AND $panjang<=panjang AND $lebar<=lebar AND $berat<=max_tumpukan AND atas='T' ORDER BY id_barang ASC") or die("Tampil 1: " . mysql_error());
while ($temp = mysql_fetch_array($q_cek_atas)) { $id_temp = $temp['id_barang']; $x_temp = $temp['x']; $y_temp = $temp['y']; $z_temp = $temp['z']; $panjang_temp = $temp['panjang']; $tinggi_temp = $temp['tinggi']; $lebar_temp = $temp['lebar']; $berat_temp = $temp['berat']; $index_x = $temp['index_x']; $index_y = $temp['index_y']; $index_z = $temp['index_z'];
$max_tumpukan = $berat_temp - $berat;
if ($y_temp + $tinggi_temp / 2 + $tinggi <= $tinggi_ruangan_max) {
$x = $x_temp;
$y = $y_temp + $tinggi_temp / 2 + $tinggi / 2;
$z = $z_temp;
mysql_query("UPDATE tabel_temp_barang SET atas='F' WHEREid_barang=$id_temp") or die("Update 1" . mysql_error());
mysql_query("INSERT INTO tabel_temp_barang
(id_user, id_barang, x,y,z,panjang,tinggi,lebar, berat, atas,kanan,dalam, index_x, index_y, index_z, max_tumpukan) VALUES($id_user, $id_kotak, $x,$y,$z, $panjang,$tinggi,$lebar, $berat, 'T', 'F', 'F', $index_x, $index_y+1, $index_z,$max_tumpukan)") or die("Insert 1" . mysql_error());
return Array($x, $y, $z); break;
} else { continue; }
} }
function kesamping($id_user, $panjang, $tinggi, $lebar, $berat, $panjang_ruangan_max, $tinggi_ruangan_max, $lebar_ruangan_max, $id_kotak) {
// $q_cek_atas = mysql_query("SELECT * FROM tabel_temp_barang WHERE id_user=$id_user AND $panjang<=panjang AND $lebar<=lebar AND $berat<=max_tumpukan
//AND kanan='T' ORDER BY id_barang ASC ") or die("Tampil 1: " . mysql_error()); $q_cek_atas = mysql_query("SELECT * FROM
tabel_temp_barang WHERE id_user=$id_user AND $lebar<=lebar AND $berat<=max_tumpukan AND kanan='T' ORDER BY id_barang ASC ") or die("Tampil 1: " . mysql_error());
while ($temp = mysql_fetch_array($q_cek_atas)) { $id_temp = $temp['id_barang']; $x_temp = $temp['x']; $y_temp = $temp['y']; $z_temp = $temp['z']; $panjang_temp = $temp['panjang']; $tinggi_temp = $temp['tinggi']; $lebar_temp = $temp['lebar']; $index_x = $temp['index_x']; $index_y = $temp['index_y']; $index_z = $temp['index_z']; $max_tumpukan = $berat;
if ($x_temp + $panjang_temp / 2 + $panjang <= $panjang_ruangan_max) {
$x = $x_temp + $panjang_temp / 2 + $panjang / 2; $y = $y_temp - $tinggi_temp / 2 + $tinggi / 2; $z = $z_temp - $lebar_temp / 2 + $lebar / 2;
mysql_query("UPDATE tabel_temp_barang SET kanan='F' WHERE id_barang=$id_temp") or die("Update 1" . mysql_error()); mysql_query("INSERT INTO tabel_temp_barang (id_user, id_barang,x,y,z,panjang,tinggi,lebar, berat,
atas,kanan,dalam, index_x, index_y, index_z, max_tumpukan) VALUES($id_user, $id_kotak,$x,$y,$z, $panjang,$tinggi,$lebar, $berat, 'T', 'T', 'T', $index_x+1, $index_y, $index_z,
$max_tumpukan)") or die("Insert 1" . mysql_error()); return Array($x, $y, $z);
} else { continue; }
} }
function kedalam($id_user, $panjang, $tinggi, $lebar, $berat, $panjang_ruangan_max, $tinggi_ruangan_max, $lebar_ruangan_max, $id_kotak) {
$q_cek_atas = mysql_query("SELECT * FROM tabel_temp_barang WHERE id_user=$id_user AND $panjang<=panjang AND $lebar<=lebar AND
$berat<=max_tumpukan AND dalam='T' ORDER BY index_x ASC, id_barang ASC LIMIT 1") or die("Tampil 1: " . mysql_error()); while ($temp = mysql_fetch_array($q_cek_atas)) {
$id_temp = $temp['id_barang']; $x_temp = $temp['x']; $y_temp = $temp['y']; $z_temp = $temp['z']; $panjang_temp = $temp['panjang']; $tinggi_temp = $temp['tinggi']; $lebar_temp = $temp['lebar']; $index_x = $temp['index_x']; $index_y = $temp['index_y']; $index_z = $temp['index_z']; $max_tumpukan = $berat;
if ($z_temp + $lebar_temp / 2 + $lebar <= $lebar_ruangan_max && $panjang <=$panjang_temp) {
$x = $x_temp - $panjang_temp / 2 + $panjang / 2; $y = $y_temp - $tinggi_temp / 2 + $tinggi / 2; $z = $z_temp + $lebar_temp / 2 + $lebar / 2;
mysql_query("UPDATE tabel_temp_barang SET dalam='F' WHERE id_barang=$id_temp") or die("Update 1" . mysql_error()); mysql_query("INSERT INTO tabel_temp_barang (id_user, id_barang, x,y,z,panjang,tinggi,lebar, berat,
atas,kanan,dalam, index_x, index_y, index_z, max_tumpukan) VALUES($id_user, $id_kotak,$x,$y,$z, $panjang,$tinggi,$lebar, $berat, 'T', 'F', 'T', $index_x+1, $index_y, $index_z+1, $max_tumpukan)") or die("Insert 1" . mysql_error()); return Array($x, $y, $z);
} else { continue; }
} }
//jika tabel_temp_barang masih kosong
function kotak_pertama($id_user, $panjang, $tinggi, $lebar, $panjang_ruangan_min, $tinggi_ruangan_min, $lebar_ruangan_min, $berat, $id_kotak) {
$x = $panjang_ruangan_min + $panjang / 2; $y = $tinggi_ruangan_min + $tinggi / 2; $z = $lebar_ruangan_min + $lebar / 2; $max_tumpukan = $berat;
mysql_query("INSERT INTO tabel_temp_barang (id_user, id_barang, x,y,z,panjang,tinggi,lebar, berat, atas,kanan,dalam, index_x, index_y, index_z, max_tumpukan) VALUES($id_user, $id_kotak, $x,$y,$z, $panjang,$tinggi,$lebar, $berat, 'T', 'T', 'T', 0,0,0, $max_tumpukan)") or die("Insert 1" . mysql_error());
return Array($x, $y, $z); }