- Katılım
- 2 Mart 2022
- Mesajlar
- 2
Dahası
- Reaksiyon skoru
- 1
- İsim
- Ezgi
Oluşturduğum kodda fonksiyonu def ile daha önce tanımlamıştım. Tanımladığım fonksiyonu, kod dizisinin en sonunda elde ettiğim aday popülasyon listesinin içindeki elemanlar için çalıştırmak istiyorum fakat fonksiyonu çağırdığımda elde etmek istediğim değerleri getirmiyor. İlgilenen olursa kendimi daha net ifade eder yazarım.
Python:
NP = int(input("Popülasyon büyüklüğünü giriniz:"))
print("NP:",NP)
F = float(input("Ölçek faktörünü giriniz:"))
print("F:",F)
CR = float(input("Çaprazlama oranını giriniz:"))
print("CR:",CR)
#Satırlar arası ve makineler arası gereken boşluk
gm = 2
gr = 2
#Satır sayısı
r=5
#ürün sayısı makine sayısı ve makinelerin genişlik uzunluklarının okunması
ezgi_dosya = open("C:/Users/kullanici/Desktop/Test Problemleri/test_1.txt","r",encoding="utf-8")
for i in range(0,4):
line=ezgi_dosya.readline()
if i==1:n=int(line) #ürün sayısı
if i==3:m=int(line) #makine sayısı
while line.find("n w l")==-1:
line=ezgi_dosya.readline()
genıslık_uzunluk={}
while 1:
line=ezgi_dosya.readline()
if line.find("bitti")!=-1:
break
(n,w,l)=line.split()
genıslık_uzunluk[int(n)]=(float(w),float(l))
ezgi_dosya.close()
print(genıslık_uzunluk)
(w,l)=genıslık_uzunluk[1]
#print(genıslık_uzunluk[1])
genıslık=[]
uzunluk=[]
for i in range(m):
(w,l)=genıslık_uzunluk[i+1]
genıslık.append(w)
uzunluk.append(l)
print("urun_genislik:",genıslık)
print("urun_uzunluk:",uzunluk)
#ürün rotalarınınokunması
ezgi_dosya2=open("C:/Users/kullanici/Desktop/Test Problemleri/test_1_rota.txt","r",encoding="utf-8")
satir=ezgi_dosya2.readline()
while satir.find("başla")==-1:
satir=ezgi_dosya2.readline()
urunno_rota={}
while 1:
satir = ezgi_dosya2.readline()
if satir.find("bitti")!=-1:
break
satir=satir[:-1]
liste1=satir.split(",")
x=len(liste1)
urunno_rota[int(liste1[0])]=liste1[1:x]
print(urunno_rota)
#print(liste1)
#print(urunno_rota[(1)])
ezgi_dosya2.close()
urun_no=[]
urun_rota=[]
for i in urunno_rota.keys():
urun_no.append(i)
print("urun_no:",urun_no)
for i in urunno_rota.values():
urun_rota.append(i)
print("urun_rota:",urun_rota)
#print(urun_rota[0])
print("**************************************************************************************")
#başlangıç çözüm oluşturma
import random
populasyon = []
for i in range(0,NP):
brey = []
for j in range(1,m+1):
brey.append("{:.4f}".format(random.uniform(1, r + 1)))
#print(brey)
populasyon.append(brey)
print("populasyon:",populasyon)
print("**************************************************************************************")
#birinci amaç fonksiyonu bulma
length=[]
depth=[]
satır_genislik_maximum=[]
def amac_bir(i):
satır_liste = []
satır_liste_uzunluk=[]
for h in range(0, r):
satır_liste.append([])
satır_liste_uzunluk.append([])
for j in range(0, m):
for k in range(0, r):
if populasyon[i][j][0] == str(k + 1):
satır_liste[k].append(genıslık[j])
satır_liste[k].sort(reverse=True)
satır_liste_uzunluk[k].append(uzunluk[j])
#print("genislik:",satır_liste)
#print("uzunluk:",satır_liste_uzunluk)
satır_genislik=[]
for k in range(0,r):
satır_genislik.append(satır_liste[k][:1])
satır_genislik_maximum.append(satır_liste[k][:1])
#print("satırların max genişliği:",satır_genislik)
genislik_toplam=0
for i in range(0,r):
for j in range(0,len(satır_genislik[i])):
genislik_toplam+=satır_genislik[i][j]
#print("toplam genislik:",genislik_toplam)
genislik_toplam=genislik_toplam+(gr*(r-1))
#print("toplam genislik:", genislik_toplam)
uzunluk_liste = []
for j in range(0,r):
toplam = 0
for i in range(0,len(satır_liste_uzunluk[j])):
toplam+=satır_liste_uzunluk[j][i]
toplam=toplam+(gm*(len(satır_liste_uzunluk[j])-1))
uzunluk_liste.append(toplam)
uzunluk_liste.sort(reverse=True)
#print(uzunluk_liste)
uzunluk_toplam=uzunluk_liste[:1]
#print("uzunluk toplam:",uzunluk_toplam)
length.append(uzunluk_toplam[0])
depth.append(genislik_toplam)
for i in range(0,NP):
amac_bir(i)
print("length:",length)
print("depth:",depth)
#print("genişlik",satır_genislik_maximum)
alan=[]
for i in range(0,NP):
alan.append(length[i]*depth[i])
print("alan:",alan)
print("***********************************************************")
#ikinci amaç fonksiyounu bulma
pop_dayalı_urun_akıs_mal=[]
def amac_iki(i):
satır_liste = []
for h in range(0, r):
satır_liste.append([])
for j in range(0, m):
for k in range(0,r):
if populasyon[i][j][0] == str(k+1):
satır_liste[k].append(populasyon[i][j])
satır_liste[k].sort()
print("satırlara atanan populasyonlar:",satır_liste)
sıralı_genislik=[]
sıralı_uzunluk=[]
sıralı_makine=[]
for h in range(0,r):
sıralı_genislik.append([])
sıralı_uzunluk.append([])
sıralı_makine.append([])
for j in range(0,r):
for l in range(0,len(satır_liste[j])):
for k in range(0,m):
if satır_liste[j][l]==populasyon[i][k]:
sıralı_genislik[j].append(genıslık[k])
sıralı_uzunluk[j].append(uzunluk[k])
sıralı_makine[j].append(genıslık_uzunluk[(k+1)])
print("genişlikler sıralı:",sıralı_genislik)
print("uzunluklar sıralı:", sıralı_uzunluk)
print("makineler sıralı:", sıralı_makine)
for i in range(0,r):
for j in range(0,len(sıralı_uzunluk[i])):
sıralı_uzunluk[i][j]=float(sıralı_uzunluk[i][j])
for i in range(0,len(urun_no)):
for j in range(0,len(urun_rota[i])):
urun_rota[i][j]=int(urun_rota[i][j])
satır_uzunluk=[]
for i in range(0,r):
satır_uzunluk.append([])
#print(satır_uzunluk)
for j in range(0,r):
toplam = 0
for i in range(0,len(sıralı_uzunluk[j])):
toplam+=sıralı_uzunluk[j][i]
toplam=toplam + ((len(sıralı_uzunluk[j])-1) * gm)
satır_uzunluk[j].append(toplam)
#print(toplam)
print("satırların uzunluğu:",satır_uzunluk)
satır_genislik_maximum=[]
for i in range(0,r):
sıralı_genislik[i].sort(reverse=True)
if sıralı_genislik[i]!=[]:
satır_genislik_maximum.append(sıralı_genislik[i][:1])
else:
satır_genislik_maximum.append([])
#print(satır_genislik_maximum)
print("satırların genişliği:", satır_genislik_maximum)
print("******************************************************************")
# print(type(urun_rota[0][0]))
akıs_liste = []
for i in range(0, len(urun_rota)):
akıs_liste.append([])
# print(liste)
def urun_akıs(k):
for h in range(0, len(urun_rota[k])):
akıs_liste[k].append(uzunluk[urun_rota[k][h] - 1])
# akıs_liste[k].append(uzunluk[urun_rota[k][h + 1] - 1])
for k in range(0, len(urun_no)):
urun_akıs(k)
print("ürünlerin akış sırasındaki makine uzunluğu:",akıs_liste)
print("*************************************************************")
urun_akıs_maliyet = []
toplam_aynı_satır = []
for i in range(0, len(urun_no)):
toplam_aynı_satır.append([])
toplam_farklı = []
for i in range(0, len(urun_no)):
toplam_farklı.append([])
toplam_farklı_sağ = []
for i in range(0, len(urun_no)):
toplam_farklı_sağ.append([])
toplam_min = []
for i in range(0, len(urun_no)):
toplam_min.append([])
#print(toplam_min)
for k in range(0, len(akıs_liste)):
#print("k:", k)
#print(akıs_liste[k])
for l in range(0, len(akıs_liste[k]) - 1):
for e in range(0, len(akıs_liste[k])):
if e - l == 1:
#print("l:", l)
#print("e:", e)
#print("kl:", akıs_liste[k][l])
#print("ke:", akıs_liste[k][e])
# print(akıs_liste[k][l])
# print(akıs_liste[k][e])
for s in range(0, len(sıralı_uzunluk)):
for h in range(0, len(sıralı_uzunluk)):
if s == h:
if akıs_liste[k][l] in sıralı_uzunluk[s] and akıs_liste[k][e] in sıralı_uzunluk[h]:
#print("a:", akıs_liste[k][l])
a = sıralı_uzunluk[s].index(akıs_liste[k][l])
#print("a:", a)
#print("b", akıs_liste[k][e])
b = sıralı_uzunluk[h].index(akıs_liste[k][e])
#print("b:", b)
if a > b:
a, b = b, a
toplam = 0
for t in range(a, b + 1):
toplam += sıralı_uzunluk[s][t]
toplam = toplam - (akıs_liste[k][l] / 2 + akıs_liste[k][e] / 2)
toplam = toplam + (abs(a - b) * gm)
#print("toplam:", toplam)
toplam_aynı_satır[k].append(toplam)
else:
toplam = 0
for t in range(a, b + 1):
toplam += sıralı_uzunluk[s][t]
toplam = toplam - (akıs_liste[k][l] / 2 + akıs_liste[k][e] / 2)
toplam = toplam + (abs(a - b) * gm)
#print("toplam:", toplam)
toplam_aynı_satır[k].append(toplam)
else:
if akıs_liste[k][l] in sıralı_uzunluk[s] and akıs_liste[k][e] in sıralı_uzunluk[h]:
#print("a:", akıs_liste[k][l])
a = sıralı_uzunluk[s].index(akıs_liste[k][l])
#print("a:", a)
#print("b:", akıs_liste[k][e])
b = sıralı_uzunluk[h].index(akıs_liste[k][e])
#print("b:", b)
if a == 0 and b == 0:
if s < h:
toplam = akıs_liste[k][l] / 2 + akıs_liste[k][e] / 2
toplam_sağ = (satır_uzunluk[s][0] - akıs_liste[k][l] / 2) + (
satır_uzunluk[h][0] - akıs_liste[k][e] / 2)
toplam1 = 0
for t in range(s + 1, h + 1):
if len(satır_genislik_maximum[t]) == 0:
satır_genislik_maximum[t].append(0)
toplam1 += satır_genislik_maximum[t][0]
toplam1 = toplam1 + (abs(h - s) * gr)
toplam = toplam + toplam1
#print("toplam:", toplam)
toplam_sağ = toplam_sağ + toplam1
#print("toplam sağ:", toplam_sağ)
toplam_farklı[k].append(toplam)
toplam_farklı_sağ[k].append(toplam_sağ)
else:
toplam = akıs_liste[k][l] / 2 + akıs_liste[k][e] / 2
toplam_sağ = (satır_uzunluk[s][0] - akıs_liste[k][l] / 2) + (
satır_uzunluk[h][0] - akıs_liste[k][e] / 2)
toplam1 = 0
for t in range(h + 1, s + 1):
if len(satır_genislik_maximum[t]) == 0:
satır_genislik_maximum[t].append(0)
toplam1 += satır_genislik_maximum[t][0]
toplam1 = toplam1 + (abs(h - s) * gr)
toplam = toplam + toplam1
#print("toplam:", toplam)
toplam_sağ = toplam_sağ + toplam1
#print("toplam sağ:", toplam_sağ)
toplam_farklı[k].append(toplam)
toplam_farklı_sağ[k].append(toplam_sağ)
elif a == 0 and b != 0:
if s < h:
toplam = akıs_liste[k][l] / 2
toplam_sağ = satır_uzunluk[s][0] - akıs_liste[k][l] / 2
toplam_b = 0
for t in range(0, b):
toplam_b += sıralı_uzunluk[h][t]
toplam_b = toplam_b + akıs_liste[k][e] / 2 + (b * gm)
toplam_b_sağ = satır_uzunluk[h][0] - toplam_b
toplam = toplam + toplam_b
toplam_sağ = toplam_sağ + toplam_b_sağ
toplam1 = 0
for t in range(s + 1, h + 1):
if len(satır_genislik_maximum[t]) == 0:
satır_genislik_maximum[t].append(0)
toplam1 += satır_genislik_maximum[t][0]
toplam1 = toplam1 + (abs(h - s) * gr)
toplam = toplam + toplam1
#print("toplam:", toplam)
toplam_sağ = toplam_sağ + toplam1
#print("toplam sağ:", toplam_sağ)
toplam_farklı[k].append(toplam)
toplam_farklı_sağ[k].append(toplam_sağ)
else:
toplam = akıs_liste[k][l] / 2
toplam_sağ = satır_uzunluk[s][0] - akıs_liste[k][l] / 2
toplam_b = 0
for t in range(0, b):
toplam_b += sıralı_uzunluk[h][t]
toplam_b = toplam_b + akıs_liste[k][e] / 2 + (b * gm)
toplam_b_sağ = satır_uzunluk[h][0] - toplam_b
toplam = toplam + toplam_b
toplam_sağ = toplam_sağ + toplam_b_sağ
toplam1 = 0
for t in range(h + 1, s + 1):
if len(satır_genislik_maximum[t]) == 0:
satır_genislik_maximum[t].append(0)
toplam1 += satır_genislik_maximum[t][0]
toplam1 = toplam1 + (abs(h - s) * gr)
toplam = toplam + toplam1
#print("toplam:", toplam)
toplam_sağ = toplam_sağ + toplam1
#print("toplam sağ:", toplam_sağ)
toplam_farklı[k].append(toplam)
toplam_farklı_sağ[k].append(toplam_sağ)
elif a != 0 and b == 0:
if s < h:
toplam = akıs_liste[k][e] / 2
toplam_sağ = satır_uzunluk[h][0] - akıs_liste[k][e] / 2
# print("sağ",toplam_sağ)
toplam_a = 0
for t in range(0, a):
toplam_a += sıralı_uzunluk[s][t]
toplam_a = toplam_a + (akıs_liste[k][l] / 2) + (a * gm)
toplam_a_sağ = satır_uzunluk[s][0] - toplam_a
# print("sağ",toplam_a_sağ)
toplam = toplam + toplam_a
toplam_sağ = toplam_sağ + toplam_a_sağ
# print("sağ",toplam_sağ)
toplam1 = 0
for t in range(s + 1, h + 1):
if len(satır_genislik_maximum[t]) == 0:
satır_genislik_maximum[t].append(0)
toplam1 += satır_genislik_maximum[t][0]
toplam1 = toplam1 + (abs(h - s) * gr)
toplam = toplam + toplam1
#print("toplam:", toplam)
toplam_sağ = toplam_sağ + toplam1
#print("toplam sağ:", toplam_sağ)
toplam_farklı[k].append(toplam)
toplam_farklı_sağ[k].append(toplam_sağ)
else:
toplam = akıs_liste[k][e] / 2
toplam_sağ = satır_uzunluk[h][0] - akıs_liste[k][e] / 2
# print("sağ",toplam_sağ)
toplam_a = 0
for t in range(0, a):
toplam_a += sıralı_uzunluk[s][t]
toplam_a = toplam_a + (akıs_liste[k][l] / 2) + (a * gm)
toplam_a_sağ = satır_uzunluk[s][0] - toplam_a
# print("sağ",toplam_a_sağ)
toplam = toplam + toplam_a
toplam_sağ = toplam_sağ + toplam_a_sağ
# print("sağ",toplam_sağ)
toplam1 = 0
for t in range(h + 1, s + 1):
if len(satır_genislik_maximum[t]) == 0:
satır_genislik_maximum[t].append(0)
toplam1 += satır_genislik_maximum[t][0]
toplam1 = toplam1 + (abs(h - s) * gr)
toplam = toplam + toplam1
#print("toplam:", toplam)
toplam_sağ = toplam_sağ + toplam1
#print("toplam sağ:", toplam_sağ)
toplam_farklı[k].append(toplam)
toplam_farklı_sağ[k].append(toplam_sağ)
elif a != 0 and b != 0:
if s < h:
toplam_a = 0
for t in range(0, a):
toplam_a += sıralı_uzunluk[s][t]
toplam_a = toplam_a + (akıs_liste[k][l] / 2) + (a * gm)
toplam_a_sağ = satır_uzunluk[s][0] - toplam_a
toplam_b = 0
for t in range(0, b):
toplam_b += sıralı_uzunluk[h][t]
toplam_b = toplam_b + (akıs_liste[k][e] / 2) + (b * gm)
toplam_b_sağ = satır_uzunluk[h][0] - toplam_b
toplam = toplam_a + toplam_b
toplam_sağ = toplam_a_sağ + toplam_b_sağ
toplam1 = 0
for t in range(s + 1, h + 1):
if len(satır_genislik_maximum[t]) == 0:
satır_genislik_maximum[t].append(0)
toplam1 += satır_genislik_maximum[t][0]
toplam1 = toplam1 + (abs(h - s) * gr)
toplam = toplam + toplam1
#print("toplam:", toplam)
toplam_sağ = toplam_sağ + toplam1
#print("toplam sağ:", toplam_sağ)
toplam_farklı[k].append(toplam)
toplam_farklı_sağ[k].append(toplam_sağ)
else:
toplam_a = 0
for t in range(0, a):
toplam_a += sıralı_uzunluk[s][t]
toplam_a = toplam_a + (akıs_liste[k][l] / 2) + (a * gm)
toplam_a_sağ = satır_uzunluk[s][0] - toplam_a
toplam_b = 0
for t in range(0, b):
toplam_b += sıralı_uzunluk[h][t]
toplam_b = toplam_b + (akıs_liste[k][e] / 2) + (b * gm)
toplam_b_sağ = satır_uzunluk[h][0] - toplam_b
toplam = toplam_a + toplam_b
toplam_sağ = toplam_a_sağ + toplam_b_sağ
toplam1 = 0
for t in range(h + 1, s + 1):
if len(satır_genislik_maximum[t]) == 0:
satır_genislik_maximum[t].append(0)
toplam1 += satır_genislik_maximum[t][0]
toplam1 = toplam1 + (abs(h - s) * gr)
toplam = toplam + toplam1
#print("toplam:", toplam)
toplam_sağ = toplam_sağ + toplam1
#print("toplam sağ:", toplam_sağ)
toplam_farklı[k].append(toplam)
toplam_farklı_sağ[k].append(toplam_sağ)
for i in range(0, len(toplam_farklı)):
for j in range(0, len(toplam_farklı[i])):
if toplam_farklı[i][j] <= toplam_farklı_sağ[i][j]:
toplam_min[i].append(toplam_farklı[i][j])
else:
toplam_min[i].append(toplam_farklı_sağ[i][j])
# print("min toplam:", toplam_min)
for i in range(0, len(urun_no)):
for j in range(0, len(toplam_aynı_satır[i])):
if len(toplam_aynı_satır[i]) != 0:
toplam_min[i].append(toplam_aynı_satır[i][j])
# print("min toplam:", toplam_min)
for k in range(0, len(toplam_min)):
toplam = 0
for j in range(0, len(toplam_min[k])):
toplam += toplam_min[k][j]
#print(toplam)
urun_akıs_maliyet.append(toplam)
print("aynı satır:", toplam_aynı_satır)
print("farklı satır:", toplam_farklı)
print("farklı satır sağ:", toplam_farklı_sağ)
print("min toplam:", toplam_min)
print("ürünlerin akış maliyeti:", urun_akıs_maliyet)
pop_dayalı_urun_akıs_mal.append(urun_akıs_maliyet)
for i in range(0,NP):
amac_iki(i)
print("*************************************************************************")
print("tüm populasyonların ürün akış maliyeti:",pop_dayalı_urun_akıs_mal)
#normalleştirme
urun_akıs_mal=[]
def akıstoplam(j):
toplam=0
for i in range(0,len(urun_no)):
toplam+=pop_dayalı_urun_akıs_mal[j][i]
urun_akıs_mal.append(toplam)
for j in range(0,NP):
akıstoplam(j)
print("toplam urun akıs maliyeti:",urun_akıs_mal)
Fmax=[]
Fmin=[]
Amax=[]
Amin=[]
def max_min_bulma(i):
Fmax.append(max(urun_akıs_mal))
Fmin.append(min(urun_akıs_mal))
Amax.append(max(alan))
Amin.append(min(alan))
for i in range(0,NP):
max_min_bulma(i)
print("fmax:",Fmax)
print("fmin:",Fmin)
print("amax:",Amax)
print("amin:",Amin)
normallesmis_akıs=[]
normallesmis_alan=[]
def norm_akıs_alan(i):
flow=(urun_akıs_mal[i] - Fmin[0]) / (Fmax[0]-Fmin[0])
normallesmis_akıs.append(flow)
norm_alan= (alan[i]-Amin[0]) / (Amax[0]-Amin[0])
normallesmis_alan.append(norm_alan)
for i in range(0,NP):
norm_akıs_alan(i)
print("normalleşmiş akış:",normallesmis_akıs)
print("normalleşmiş alan:",normallesmis_alan)
normallesmis_amac=[]
def normal_amac(i):
amac=normallesmis_akıs[i]+normallesmis_alan[i]
normallesmis_amac.append(amac)
for i in range(0,NP):
normal_amac(i)
print("normalleşmiş amaç:",normallesmis_amac)
print("***************************************************************************")
#Mutasyon evresi
from random import sample
import random
mutant_populasyon=[]
aday_popuplasyon=[]
def mutasyon(i):
mutant_populasyon.append([])
aday_popuplasyon.append([])
aday=list(range(0,NP))
#print("aday:",aday)
aday.remove(i)
#print("aday:", aday)
rasgele_index = sample(aday, 3)
#print("rasgele index:",rasgele_index)
XA = populasyon[rasgele_index[0]]
XB = populasyon[rasgele_index[1]]
XC = populasyon[rasgele_index[2]]
#print("XA:", XA)
#print("XB:",XB)
#print("XC:",XC)
for j in range(0,len(populasyon[i])):
XA[j] = float(XA[j])
XB[j] = float(XB[j])
XC[j] = float(XC[j])
mutasyon= XA[j] + F*(XB[j]-XC[j])
mutant_populasyon[i].append(mutasyon)
# Çaprazlama evresi
rassal= random.random()
#print("rassal:",rassal)
k= random.randint(0,m)
#print("k:",k)
if rassal <= CR or k==j:
aday_popuplasyon[i].append(mutant_populasyon[i][j])
else:
aday_popuplasyon[i].append(populasyon[i][j])
# Kendime göre adayı düzenleme
aday_popuplasyon[i][j] = float(aday_popuplasyon[i][j])
if aday_popuplasyon[i][j] < 0:
aday_popuplasyon[i][j] = aday_popuplasyon[i][j] * (-1)
aday_popuplasyon[i][j] = str(aday_popuplasyon[i][j])
if aday_popuplasyon[i][j][0] == "0":
aday_popuplasyon[i][j] = float(aday_popuplasyon[i][j])
aday_popuplasyon[i][j] = aday_popuplasyon[i][j] + 1
aday_popuplasyon[i][j] = float(aday_popuplasyon[i][j])
if aday_popuplasyon[i][j] >= r + 1:
aday_popuplasyon[i][j] = str(aday_popuplasyon[i][j])
a = aday_popuplasyon[i][j][0]
a = int(a)
aday_popuplasyon[i][j] = float(aday_popuplasyon[i][j])
aday_popuplasyon[i][j] = aday_popuplasyon[i][j] - abs(a - r)
for i in range(0,NP):
mutasyon(i)
print("mutant populasyon:",mutant_populasyon)
print("aday populasyon:",aday_popuplasyon)
baslangıc_alan=[]
baslangıc_akısmal=[]
baslangıc_normallesmisamac=[]
for i in range(0,NP):
baslangıc_alan.append(alan[i])
baslangıc_akısmal.append(urun_akıs_mal[i])
baslangıc_normallesmisamac.append(normallesmis_amac[i])
print("ilk çözümün alanı:",baslangıc_alan)
print("ilk çözümün akış maliyeti:",baslangıc_akısmal)
print("ilk çözümün normalleştirilmiş amaç fonksiyon değeri:",baslangıc_normallesmisamac)