Soru sorMatlab Kutulama Problemi
mehmetali tarafından 8 yıl önce soruldu

Merhaba arkadaşlar. Matlabde kutulama problemi çözümü ödevim var. Günde 12 saat çalışan bir atölye var. Elimizde ise 14 tane bölünemeyen işler ve bunları süreleri var. Benim sorum şu. 14 e 14 bir matris oluşturmak istiyorum. Bu matrisin satırı günler(14 gün) sütunu ise işlerin büyükten küçüğe ( işlerin sürelerine göre) sıralanması ile oluşacak. Örneğin 1.gün 1. iş ve 8.işin toplamı 12 olsun. Bunlara 1 diğerlerine 0 atamam gerekiyor. Bu işlemi de diğer iş ve günler için de yapmalıyım. Kullanıcının gireceği vektöre göre bunu nasıl yapabilirim? Kodları oluşturmamda bana yardımcı olabilir misiniz?

5 Cevap
sayginer Yönetici tarafından 8 yıl önce cevaplandı

Yani anladığım kadarı ile mesela elinde farklı değerlerde 14 tane sayı var, ve sen bu sayıların toplamının 12 yapan kombinasyonlarını bulmak istiyorsun?

mehmetali tarafından 8 yıl önce cevaplandı

Elimizde 14 tane işimiz var ve bunların bitirme süreleri var.Bu işler bölünemez başlanıldığı zaman bitirilmeli.
1.gün 2.gün ….
9   1       0
8   0       1
3   1       0
2   0       1
2   0       1   örneğin elimizde bu işler olsun ve günlük çalışma süresi 12 saat 1.gün 12 saati tamamlamak için 9 ve 3 ü 2.gün 12 saati tamamlamak için 8 2 ve 2 yi seçtik. Girilen vektörün böyle bir matrise dönüştürülmesi gerekiyor. Bunu yazdırmam için ne yapmam gerekir?

sayginer Yönetici tarafından 8 yıl önce cevaplandı

Kullanıcı girdi olarak işlerin bitirme sürelerini girecek, ve daha sonra her bir gün için bu kullanıcı girdilerinden toplamı 12 edenler bulunup bunlar 1 olarak işaretlenecek. Öncelikle bunun yapılabilmesi için bütün girdilerin toplama kombinasyonlarının hesaplanması gerekiyor.
Aşağıdaki 4 farklı işe ait saatleri girdim. daha sonra bunların hangilerinin toplamının 12 yaptığını görmek için 20 iterasyon rastgele döndü döndürdüm. Sonuç olarak 8+4=12'yi veren [0 0 1 1] vektörünü elde edebildim.
Seçici matrisim rastgele oluşturulduğu için yakınsaması (converge) için iterasyon sayırını arttırman gerekebilir.

clc; clear all;
Saatler = [1 7 8 4];

for k=1:20;
Secici = randi([0 1], 1,length(Saatler));
Sonuc = Saatler.*Secici;
[adinserter block="2"]
ToplamSaat = sum(Sonuc);

if ToplamSaat==12
Secici
ToplamSaat
else
continue
end
end

mehmetali tarafından 8 yıl önce cevaplandı

14 e 14 lük matris yapmam gerekiyor ve işlerin 5 günde bitmesi lazım. m=input('Vektörü Giriniz:') [a,b]=size(m); ile kullanıcıdan vektör alıp n=sort(m,'descend') komutuyla bu vektörü büyükten küçüğe sıraladıktan sonra 14*14 lük matrisi nasıl yapabilirim? Mantık olarak en büyük değeri alıp 12 ye tamamlayan değer ile toplamam gerekiyor. Sonra bunu en büyük 2.iş için ve devamı için yapmam gerekiyor.

sayginer Yönetici tarafından 8 yıl önce cevaplandı

Aşağıda 1 gün için 4 farklı işe ait saatleri göz önünde bulundurarak bir kod oluşturdum. Bu kod öncelikle verilen saatler arasında en büyük saati seçiyor ve 12 saate tamamlamak için gereken saat sayısını hesaplayarak verilen saat havuzunda olup olmadığına bakıyor. En son olarak da bu saatleri tabloya yazıyor.
Önemli:Kod sadece 2 saat için yazıldı, verilen kod havuzunda verilen en büyük sayının 12'ye yine havuzda bulunan bir sayı ile tamamlanması gerekiyor.
Umarım kodu düzenleyerek istediğin sonuca ulaşabilirsin. Kod üzerine de açıklamalar yazdım.

clc; clear all;
Saatler = [1 7 8 4]; %Girilen saatler
BirinciSaat=max(Saatler); %İlk saat olarak en büyüğü aldık
IkinciSaat=12-BirinciSaat; %İkinci saakin kaç olabileceğini bulduk

find(Saatler==IkinciSaat); %İkinci saatimiz girilen saatler içerisinde var mı?

BirinciSaatKonum=find(Saatler==BirinciSaat);    %Birinci saatimiz verilen saatler içerisinde hangi element
IkinciSaatKonum=find(Saatler==IkinciSaat);      %İkinci saatimiz verilen saatler içerisinde hangi element

Tablo= zeros(1,4); %Tablo oluştur
Tablo(1,BirinciSaatKonum)=1; %Birinci elementi işaretle
Tablo(1,IkinciSaatKonum)=1;  %İkinci elemente işaretle
Tablo %Tabloyu tekrar ekrana bastır