Kuprinės problema „Excel VBA“ - lengvos „Excel“ makrokomandos

Turinys

Žemiau apžvelgsime programą Excel VBA kad išsprendžia nedidelis pavyzdys a kuprinės problema.

Apibrėžimas: atsižvelgiant į elementų rinkinį, kurių kiekvienas turi svorį ir vertę, nustatykite elementus, kuriuos norite įtraukti į kolekciją, kad bendra vertė būtų kuo didesnė, o bendras svoris - mažesnis už nurodytą ribą. Pavadinimas kilęs iš problemos, su kuria susiduria asmuo, suvaržytas fiksuoto dydžio kuprinės ir turi ją užpildyti naudingiausiais daiktais.

Pavyzdys: 5 elementai su svoriais, vertėmis ir apribojimais, kaip nurodyta.

„Excel“ ši problema atrodo taip:

1. Pirmiausia deklaruojame penkis „Double“ tipo kintamuosius su pavadinimais limit, weight, value, totalWeight ir maximumValue.

Dim riba kaip dviguba, svoris kaip dvigubas, vertė kaip dviguba, totalWeight kaip dviguba, maximumValue kaip dviguba

2. Toliau deklaruojame penkis Integer tipo kintamuosius su pavadinimais i, j, k, l, m.

Dim i, j, k, l, m As Integer

3. Inicijuojame du kintamuosius. Mes inicijuojame kintamųjų ribą naudodami ląstelės D6 vertę. Inicijuojame kintamąjį maximumValue su reikšme 0.

limit = Diapazonas ("D6"). vertė
maximumValue = 0

4. Toliau patikriname kiekvieną galimą sprendimą. Mes galime įtraukti elementą (1) arba palikti jį (0). Mes pradedame 5 „For Next“ kilpas. Po vieną kiekvienam elementui.

Jei i = 0 iki 1
Jei j = 0 iki 1
Jei k = 0 iki 1
Jei l = 0 iki 1
Jei m = nuo 0 iki 1

5. Apskaičiuojame galimo sprendimo svorį ir vertę.

svoris = 12 * i + 2 * j + 1 * k + 1 * l + 4 * m
vertė = 4 * i + 2 * j + 2 * k + 1 * l + 10 * m

6. Tik tada, jei vertė yra didesnė už maximumValue, o svoris yra mažesnis už ribą, radome naują geresnį sprendimą.

Jei vertė> maximumValue Ir svoris <= riba Tada

7. Jei tai tiesa, naują sprendimą rašome 4 eilutėje, svoris - totalWeight, o vertė - maximumValue.

Diapazonas („B4“). Vertė = i
Diapazonas („C4“). Vertė = j
Diapazonas („D4“). Vertė = k
Diapazonas ("E4"). Vertė = l
Diapazonas ("F4"). Vertė = m
totalWeight = svoris
maximumValue = vertė

8. Nepamirškite uždaryti teiginio.

Pabaiga Jei

9. Nepamirškite uždaryti 5 For Next kilpų.

 Kitas m
Kitas l
Kitas k
Kitas j
Kitas I.

„Excel VBA“ tokiu būdu tikrina kiekvieną galimą sprendimą ir dėl to optimalus sprendimas bus rodomas 4 eilutėje. Atminkite, kad 1 reiškia, kad įtraukiame elementą, 0 reiškia, kad jį paliekame.

10. Galiausiai į atitinkamą langelį B6 ir B8 parašykite optimalaus sprendimo totalWeight ir maximumValue.

Diapazonas („B6“). Vertė = bendras svoris
Diapazonas („B8“). Value = maximumValue

11. Išbandykite programą.

Rezultatas:

Išvada: optimalu įtraukti paskutinius keturis elementus, kurių didžiausia vertė yra 15. Šis sprendimas, kurio bendras svoris 2 + 1 + 1 + 4 = 8, neviršija 15 ribos.

Pastaba: nustatydami svorius ir vertes kintamuosius, galite išspręsti bet kokias tokio dydžio kuprinės problemas (žr. Atsisiunčiamą „Excel“ failą).

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave