Institutional Repository | Satya Wacana Christian University: Analisis Hasil Panen Padi menggunakan Pemodelan Kuadratik dan Ant Colony Otimization (ACO)
LAMPIRAN
Lampiran 1: Data padi sawah tahun 1992-2012 dari BPS kota Surakarta
No
Periode I
LP
I
HH I
LTA
II
Periode II
LP
HH
II
II
Periode III
Tahun
LTA
I
LTA
III
LP III
HH
III
1
1992
125
91
62,41
112
114
55,44
173
83
55,30
2
1993
153
139
59,35
141
115
54,34
176
103
63,08
3
1994
160
145
63,45
153
107
55,57
133
113
57,07
4
1995
81
126
63,73
81
98
57,14
96
103
64,17
5
1996
141
124
60,40
83
156
54,93
126
101
63,36
6
1997
99
135
63,11
63
106
64,05
65
71
65,77
7
1998
66
94
62,12
64
105
51,80
106
84
56,90
8
1999
57
104
57,30
49
94
47,12
83
78
64,74
9
2000
99
113
64,42
54
107
58,31
88
81
46,66
10
2001
89
73
53,29
60
89
53,60
101
62
56,77
11
2002
104
113
53,53
65
96
53,02
91
51
52,54
12
2003
75
55
51,82
58
101
51,58
88
42
52,14
13
2004
72
86
52,91
61
83
52,29
65
48
52,29
14
2005
79
73
51,86
42
94
50,58
83
55
52,14
15
2006
86
78
51,34
33
102
43,88
88
56
51,07
16
2007
75
129
50,60
51
79
47,02
84
49
51,33
17
2008
76
102
52,38
51
86
51,09
80
51
52,69
18
2009
102
85
50,43
71
116
50,88
82
87
51,44
19
2010
92
109
50,58
43
111
48,49
76
55
50,94
20
2011
82
59
51,34
10
24
36,89
60
31
69,83
21
2012
36
64
59,26
17,00
72,00
78,04
24
47
83,27
xiv
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
24
47
83.27
xv
%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);
a51=a15;a52=sum(y.^3);a53=a35;a54=a45;
xvi
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
kondisional= cond(A)
xvii
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');
[x,fval] = fsolve(@soal2,x0,options)
xviii
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;
Stopi=sigma;
xix
%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
kondisional= cond(A)
xx
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;
MAXIT=50;
xxi
r=rand(N,1);
while kounter xj(j,1)&&r(i)=1
xxii
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
solusix=xbest
f=mysoal3(solusix)
xxiii
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)
vy(4)=xy(2,4)
xxiv
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')
legend('ruas kiri','ruas kanan')
xxv
Lampiran 1: Data padi sawah tahun 1992-2012 dari BPS kota Surakarta
No
Periode I
LP
I
HH I
LTA
II
Periode II
LP
HH
II
II
Periode III
Tahun
LTA
I
LTA
III
LP III
HH
III
1
1992
125
91
62,41
112
114
55,44
173
83
55,30
2
1993
153
139
59,35
141
115
54,34
176
103
63,08
3
1994
160
145
63,45
153
107
55,57
133
113
57,07
4
1995
81
126
63,73
81
98
57,14
96
103
64,17
5
1996
141
124
60,40
83
156
54,93
126
101
63,36
6
1997
99
135
63,11
63
106
64,05
65
71
65,77
7
1998
66
94
62,12
64
105
51,80
106
84
56,90
8
1999
57
104
57,30
49
94
47,12
83
78
64,74
9
2000
99
113
64,42
54
107
58,31
88
81
46,66
10
2001
89
73
53,29
60
89
53,60
101
62
56,77
11
2002
104
113
53,53
65
96
53,02
91
51
52,54
12
2003
75
55
51,82
58
101
51,58
88
42
52,14
13
2004
72
86
52,91
61
83
52,29
65
48
52,29
14
2005
79
73
51,86
42
94
50,58
83
55
52,14
15
2006
86
78
51,34
33
102
43,88
88
56
51,07
16
2007
75
129
50,60
51
79
47,02
84
49
51,33
17
2008
76
102
52,38
51
86
51,09
80
51
52,69
18
2009
102
85
50,43
71
116
50,88
82
87
51,44
19
2010
92
109
50,58
43
111
48,49
76
55
50,94
20
2011
82
59
51,34
10
24
36,89
60
31
69,83
21
2012
36
64
59,26
17,00
72,00
78,04
24
47
83,27
xiv
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
24
47
83.27
xv
%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);
a51=a15;a52=sum(y.^3);a53=a35;a54=a45;
xvi
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
kondisional= cond(A)
xvii
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');
[x,fval] = fsolve(@soal2,x0,options)
xviii
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;
Stopi=sigma;
xix
%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
kondisional= cond(A)
xx
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;
MAXIT=50;
xxi
r=rand(N,1);
while kounter xj(j,1)&&r(i)=1
xxii
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
solusix=xbest
f=mysoal3(solusix)
xxiii
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)
vy(4)=xy(2,4)
xxiv
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')
legend('ruas kiri','ruas kanan')
xxv