Excel VBA'da Sırt Çantası Sorunu - Kolay Excel Makroları

İçindekiler

Aşağıda bir programa bakacağız Excel VBA'sı o çözer küçük bir örneği bir sırt çantası sorunu.

Tanım: Her biri bir ağırlık ve değere sahip bir dizi öğe verildiğinde, bir koleksiyona dahil edilecek öğeleri belirleyin, böylece toplam değer mümkün olduğu kadar büyük ve toplam ağırlık belirli bir sınırdan az olur. Adını, sabit boyutlu bir sırt çantasıyla kısıtlanan ve en kullanışlı eşyalarla doldurması gereken birinin karşılaştığı sorundan alır.

Örnek: Ağırlıkları, değerleri ve limiti verilen 5 madde.

Excel'de bu sorun aşağıdaki gibi görünür:

1. İlk olarak, limit, ağırlık, değer, totalWeight ve maximumValue adlarıyla Double türünde beş değişken tanımlıyoruz.

Dim limiti Double As, ağırlık Double As, değer Double As, totalWeight As Double, maximumValue As Double

2. Daha sonra, i, j, k, l, m adlarıyla Tamsayı türünde beş değişken tanımlıyoruz.

Dim i, j, k, l, m Tamsayı Olarak

3. İki değişkeni başlatıyoruz. Değişken limitini D6 hücresinin değeri ile başlatıyoruz. MaximumValue değişkenini 0 değeri ile başlatıyoruz.

limit = Aralık("D6").değer
maksimumDeğer = 0

4. Ardından, olası her çözümü kontrol ederiz. Bir öğeyi (1) ekleyebilir veya dışarıda bırakabiliriz (0). 5 For Next döngüsüne başlıyoruz. Her öğe için bir tane.

i = 0'dan 1'e
j = 0'dan 1'e
k = 0'dan 1'e
l = 0 ila 1 için
m = 0'dan 1'e

5. Olası bir çözümün ağırlığını ve değerini hesaplıyoruz.

ağırlık = 12 * i + 2 * j + 1 * k + 1 * l + 4 * m
değer = 4 * ben + 2 * j + 2 * k + 1 * l + 10 * m

6. Yalnızca değer maksimumDeğer'den yüksekse ve ağırlık sınırdan düşükse, yeni ve daha iyi bir çözüm bulduk.

Eğer değer > maksimumDeğer Ve ağırlık <= limit O zaman

7. Eğer true ise, 4. satıra yeni çözümü, totalWeight'a ağırlık ve maximumValue'a value yazıyoruz.

Aralık("B4").değer = ben
Aralık("C4").değer = j
Aralık("D4").değer = k
Aralık("E4").değer = l
Aralık("F4").değer = m
toplam Ağırlık = ağırlık
maksimumDeğer = değer

8. If deyimini kapatmayı unutmayın.

Bitir

9. 5 For Next döngüsünü kapatmayı unutmayın.

 sonraki m
sonraki l
Sonraki k
sonraki j
sonraki ben

Excel VBA, olası her çözümü bu şekilde kontrol eder ve sonuç olarak en uygun çözüm 4. satırda görünür. Unutmayın, 1 bir öğe eklediğimiz anlamına gelir, 0 ise onu dışarıda bıraktığımız anlamına gelir.

10. Son olarak, sırasıyla B6 ve B8 hücrelerine optimal çözümün totalWeight ve maximumValue değerini yazın.

Aralık("B6").değer = toplamAğırlık
Aralık("B8").değer = maksimumDeğer

11. Programı test edin.

Sonuç:

Sonuç: Son dört öğeyi maksimum 15 değerle dahil etmek en uygunudur. Toplam ağırlığı 2+1+1+4=8 olan bu çözüm 15 sınırını geçmez.

Not: Ağırlıkları ve değerleri değişken yaparak bu boyuttaki herhangi bir sırt çantası sorununu çözebilirsiniz (indirilebilir Excel dosyasına bakın).

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave