xiv
Lampiran 1: Data padi sawah tahun 1992-2012 dari BPS kota Surakarta
No
Tahun
xv
Lampiran 2: Program MATLAB untuk mendapatkan parameter fungsi tujuan periode
tanam III dengan metode kuadrat terkecil
%data untuk periode tanam III di simpan dengan nama “data2.dat”
173 83 55.30
176 103 63.08
133 113 57.07
96 103 64.17
126 101 63.36
65 71 65.77
106 84 56.90
83 78 64.74
88 81 46.66
101 62 56.77
91 51 52.54
88 42 52.14
65 48 52.29
83 55 52.14
88 56 51.07
84 49 51.33
80 51 52.69
82 87 51.44
76 55 50.94
60 31 69.83
xvi
%program untuk mendapatkan parameter fungsi tujuan disimpan dengan nama
“MKT3”
clear all;close all;
%Cari alpa dengan meyusun matriks Ax=b dan x=[alpa] dengan metode kuadrat
terkecil
load 'data2.dat'
%untuk memanggil data yang suda disimpan dengan nama data2
[m,n]=size(data2)
% data dibuat tak berdimensi
T=data2(:,1)/max(data2(:,1));
P=data2(:,2)/max(data2(:,2));
S=data2(:,3)/max(data2(:,3));
Datatakberdim=[T P S]
x=T;
y=P;
%menyusun matriks A
%Matriks A hanya digunakan untuk fungsi kuadratik 2 variabel untuk fungsi yang lain
dapat disusun matriks A yang lain juga.
a11=sum(x.^4);a12=sum(x.^2.*y.^2);a13=sum(x.^3.*y);a14=sum(x.^3);
a15=sum(x.^2.*y);a16=sum(x.^2);
a21=sum(x.^2.*y.^2);a22=sum(y.^4);a23=sum(x.*y.^3);a24=sum(x.*y.^2);
a25=sum(y.^3);a26=sum(y.^2);
a31=a13;a32=a23;a33=a21;a34=a15;
a35=a24;a36=sum(x.*y);
a41=a14;a42=a24;a43=a34;a44=a16;
a45=a36;a46=sum(x);
xvii a55=a26;a56=sum(y);
a61=a16;a62=a26;a63=a36;a64=a46;
a65=a56;a66=n;
A=[a11 a12 a13 a14 a15 a16;
a21 a22 a23 a24 a25 a26;
a31 a32 a33 a34 a35 a36;
a41 a42 a43 a44 a45 a46;
a51 a52 a53 a54 a55 a56;
a61 a62 a63 a64 a65 a66];
%vb adalah ruas kanan
vb=[sum(S.*x.^2); sum(S.*y.^2);sum(S.*x.*y);sum(S.*x);sum(S.*y);sum(S)];
alpa=inv(A)*vb;
%hasil yang diperoleh
hasil=alpa(1)*x.^2 + alpa(2)*y.^2 + alpa(3)*x.*y + alpa(4)*x+alpa(5)*y+alpa(6);
figure
plot(1:m,S,'*-',1:m,hasil,'o-')
legend('hasil','pendekatan')
xlabel('indeks')
ylabel('fungsi tujuan')
%untuk mencari error
error=norm(S-hasil)/norm(S)*100 %sudah dalam bentuk persen %untuk mencari kondisional number
xviii
Lampiran 3: Fungsi fsolve pada MATLAB untuk periode tanam III
%menuliskan fungsi tujuan disimpan dengan nama “soal2”
function F = soal2(x)
F = -[x(3)*(x(1)-1);
x(4)*(x(2)-x(1));
x(5)*-x(1);
x(6)*-x(2);
2*1.067*x(1)-1.684*x(2)-0.319+x(3)-x(4)-x(5);
2*-1.012*x(2)-1.684*x(1)+2.510+x(4)-x(6)];
%program disimpan dengan nama “jawab2”
% membuat titik-titik dugaan solusi
x0 = [1;0.3;0;0;0.2;0.9];
%pilihan untuk menampilkan keluaran program
options=optimset('Display','iter');
xix
Lampiran 4: Mencari parameter fungsi tujuan menggunakan SVD untuk periode III
%program disimpan dengan nama “SVD3”
clear all;close all;
%Cari alpha beta dengan meyusun matriks Ax=b dan x=[alpa] load 'data2.dat'
[m,n]=size(data2)
%data dibuat tak berdimensi T=data2(:,1)/max(data2(:,1));
P=data2(:,2)/max(data2(:,2));
S=data2(:,3)/max(data2(:,3));
Datatakberdim=[T P S]
x=T;
y=P;
i=ones(1,length(x))';
%meyusun matriks A dari data A=[x.^2 y.^2 x.*y x y i];
rank(A)
[U,sigma,V]=svd(A)
% U*sigma*V'-A haruslah 0 U*sigma*V'-A
%ruas kanan b=S;
c=U'*b
ctopi=c;
xx %membuang baris ke-i dimana i > rank(A) ctopi(7:21,:)=[]
Stopi(7:21,:)=[]
ytopi=inv(Stopi)*ctopi
%hasil
alpa=V*ytopihasil=alpa(1)*x.^2 + alpa(2)*y.^2 + alpa(3)*x.*y + alpa(4)*x+alpa(5)*y+alpa(6);
figure
plot(1:m,S,'*-',1:m,hasil,'o-')
legend('hasil','pendekatan')
xlabel('indeks')
ylabel('fungsi tujuan')
error=norm(S-hasil)/norm(S)*100 % sudah dalam persen %untuk mencari kondisional number
xxi
Lampiran 5: Ant Colony Optimization (ACO) untuk periode III
%fungsi tujuan untuk ACO disimpan dengan nama “mysoal3” function f=mysoal3(x)
f=(1.1955*x(1)^2+0.7538*x(2)^2-0.1339*x(1)*x(2)-1.6698*x(1)-0.6658*x(2)+1.3404+ x(3)*(x(1)-1)+x(4)*(x(2)-x(1))-x(5)*x(1)-x(6)*x(2));
%program disimpan dengan nama “semut6_3” %program ACO
Clear
%N merupakan banyaknya semut yang akan melakukan perjalanan N=20;
%menentukan titik awal dengan bilangan random x=rand(100);
p=length(x);
duga=1;
tau=ones(p,1)*duga;
prob=tau./sum(tau)
%susun interval probabilitas x0j=[0;[1:p-1]'.*prob(1:p-1)]
x1j=[[1:p-1]'.*prob(1:p-1); 1]
xj=[x0j x1j]
%Tahap 2 kounter=1;
xxii r=rand(N,1);
while kounter <MAXIT
kounterku=kounter
%xb sebanyak variabel yang akan dicari, dalam kasus ini 6 variabel xb1(i)=x(indexku,1);
%Hitung fungsi tujuan tiap semut for i=1:length(vxb)
fv(i)=mysoal3(vxb(i,:)); end
%cari indeks yang membuat fungsi tujuan terbagus dan buruk w=fv;
indeksbest=find(w==min(fv)); indeksworst=find(w==max(fv));
xxiii indekbgs=min(indeksbest)
xbest=x(indekbgs,:); end
if length(indeksworst)>=1 indekjelek=min(indeksworst) xworst=x(indekjelek,:);
end %Tahap4
chi=2; %parameter menskala tau rho=0.5; %parameter penurunan paramon deltatau = chi*fv(indekbgs)/fv(indekjelek) tau=(1-rho)*tau;
taubaru=tau + deltatau; if norm(taubaru)> norm(tau) tau=taubaru;
end
kounter=kounterku+1;
p=length(vxb); %untuk memperbaharui probabilitas tau prob=tau./sum(tau);
x0j=[0;[1:p-1]'.*prob(1:p-1)]; x1j=[[1:p-1]'.*prob(1:p-1); 1]; xj=[x0j x1j];
x=vxb; end
xxiv
Lampiran 6: Studi konveks untuk fungsi tujuan SVD pada periode III
%program disimpan dengan nama “convek3”
clear
close all
%studi konveks
lamda=linspace(0,1,10); %memvariasi lamda
%memilih D adalah himpunan titik-titik pada garis x = 0 c=0;
y=0:0.1:1;
n=length(y);
x=c*ones(1,n);
plot(x,y,'-')
axis([-3 3 -3 3])
xy=[x' y' y' y' y' y']
vx(1)=xy(1,1)
vx(2)=xy(1,2)
vx(3)=xy(1,3)
vx(4)=xy(1,4)
vx(5)=xy(1,5)
vx(6)=xy(1,6)
vy(1)=xy(2,1)
vy(2)=xy(2,2)
vy(3)=xy(2,3)
xxv vy(5)=xy(2,5)
vy(6)=xy(2,6)
pl=length(lamda);
fu=zeros(pl,1);
Kanan=zeros(pl,1);
for i=1:pl
u(1)=lamda(i)*vx(1) + (1-lamda(i))*vy(1)
u(2)=lamda(i)*vx(2) + (1-lamda(i))*vy(2)
u(3)=lamda(i)*vx(3) + (1-lamda(i))*vy(3)
u(4)=lamda(i)*vx(4) + (1-lamda(i))*vy(4)
u(5)=lamda(i)*vx(5) + (1-lamda(i))*vy(5)
u(6)=lamda(i)*vx(6) + (1-lamda(i))*vy(6)
fu(i)=1.1955*u(1)^2 -0.1339*u(1)*u(2) +0.7538*u(2)^2 -1.6698*u(1) -0.6658*u(2)-1.3404+u(3)*(u(1)-1)+u(4)*(u(2)-u(1))-u(5)*u(1)-u(6)*u(2)
fx=1.1955*vx(1)^2 0.1339*vx(1)*vx(2) +0.7538*vx(2)^2 1.66988*vx(1) -0.6658*vx(2) -1.3404+vx(3)*(vx(1)-1)+vx(4)*(vx(2)-vx(1))-vx(5)*vx(1)-vx(6)*vx(2)
fy=1.1955*vy(1)^2 0.1339*vy(1)*vy(2) +0.7538*vy(2)^2 1.6698*vy(1)
-0.6658*vy(2) -1.3404+vy(3)*(vy(1)-1)+vy(4)*(vy(2)-vy(1))-vy(5)*vy(1)-vy(6)*vy(2)
Kanan(i)=lamda(i)*fx + (1-lamda(i))*fy
end
Banding=[lamda' fu Kanan]
figure,plot(1:pl,fu,'*',1:pl,Kanan,'o')