Сборът на кои числа е равен на точно определено число – решение в Excel

Много хора си мислят, че счетоводството е една скучна професия, но всъщност е точно обратното. Трудът на счетовододителя е изпълнен с весели и забавни моменти. Например – фирмата е издала дузина фактури на клиент, всяка на различна стойност. Клиентът бави плащанията под всякакъв предлог, но един ден – взел че платил. Но не всички фактури и не с отделно плащане за всяка. Защо да си прави този труд – пуска някаква сума, а счетоводителят да се оправя.

Ето и картинка да си представите по-образно, така да се каже, казуса на счетоводителя.

От едната страна имаме няколко числа – стойностите на всяка от фактурите, от другата – получената сума от клиента. Въпросът сега е, аджеба, сборът на кои точно фактури дава 1,000 лева? За да може счетоводителят да ги отметне като платени.

„Голяма работа!“ – ще кажете „Да ги отмята под ред – която първа я издал, първа да закрива и така докато се изчерпи сумата“. В повечето случаи точно това и се прави (на счетоводен език се нарича FIFO – First In First Out). Но не са рядкост случаите, в които това не е е опция. Да речем – счетоводният софтуер не позволява да се закрие частично фактура. Или от това, коя фактура се закрие зависи каква услуга ще се активира. Например карта за фитнес. И мениджърите на фирмата-клиент много се сърдят, когато не им активират картите, а пък на техните подчинени са активирани.

„Еми да са написали кои карти активират“ – ще кажете. Ето виждате – не е скучно да си счетоводител.

Шегата на страна, счетоводните неволи са само един от много примери, когато се налага да налучкаме сборът на кои числа дава определено число. Няма да го увъртам повече,

решeнието в Ексел е лесно със Solver

Най-напред трябва малко подготовка. В една съседна колона правим следната формула, копираме я до края и (това е много важно) правим сума най-отдолу. В нашия случай сумата е в клетка D11. Споменавам го, защото след малко ще ни трябва.

Отиваме на Data > Analyze > Solver

Solver в Excel

Заб.: Ако не виждате Solver в лентата за бутони, най-вероятно не е активиран. Тук може да видите как да го активирате.

Появява се меню, в което задаваме следното:

Solver в Excel

В Set Objective -> D11 (клетката, в която е формулата за сума)

Кликаме на Value Of: и записваме числото, на което трябва да се равнява сборът от сумите (в примера: 1000)

В полето By Changing Variable Cells определяме кои клетки са променливите, т.е. с кои клетки да си „играе“ Ексел, за да намери решение на задачата (в примера: C4:C10). В тях не трябва да има формули.

Трябва да зададем и ограниченията (Constraints) затова натискаме бутона Add и след това задаваме клетките в областта C4:C10 и избираме bin (binary). С други думи казваме, че ограничението е клетките в С4:С10 да са или нули, или единица.

Solver в Excel

Най-накрая натискаме Add и после Solve

Тук натискаме ОК

Solver в Excel

И готово – имаме решение на задачата.

Някои необходими уточнения

Няма да крия, че този номер не съм го измислил аз. Потърсете в гугъл и ще намерите поне 50 подобни указания. Всички те обаче спират до тук. Но аз ви предлагам да направим още една стъпка напред. Навярно сте забелязали, че предложеното от Ексел решение не е единственото.

100 + 200 +200 + 500 също е валидно решение. Но и 200 + 300 + 500 става. Както и 100 + 300 + 600

Защо Ексел ни предложи точно това? Едно възможно обяснение е, че това е единственото решение с две числа и вероятно алгоритъмът, по който работи Ексел го счита за оптималното.

Ако искаме да разберем какъв е този алгоритъм, трябва отново да натиснем Solver и да погледнем в секцията Select a Solving Method.

Solver в Excel

Виждате, че има три възможни метода – GRG Nonlinear, Simplex LP и Evolutionary. Най-отдолу има кратко описание в какви случаи какъв метод да се използва.

GRG Nonlinear е методът по подразбиране, но ако изберем Simplex LP …. Ето го решението:

А това е с Evolutionary

Това отново е с Evolutionary метода, но този път числата са подредени в низходящ ред

Очевидно е, че трите метода търсят решението по различна логика и в зависимост от подредбата на числата. Признавам си – за момента нямам ясна представа как работят. Обещавам да потърся и да пиша.

Но до тогава можем да направим няколко важни извода:

  • Задачата кои числа дават сбор точно определено число е напълно решима с Ексел.
  • Ексел може да намери повече от едно решение, ако числата са такива, че това е възможно
  • Това зависи поне от две неща – избрания метод и подредбата на числата
  • Затова не приемайте на доверие решението, което подава Ексел, а проверете и с другите методи дали случайно няма няколко решения

За финал – нещо МНОГО ВАЖНО: Има ограничение за броя на variable cells в Solver – трябва да са не повече от 200. За това също мълчат колегите ексел блогъри. А като пробвате с 200 клетки, Ексел смята много време. Може да отнеме и половин час.

Публикувано в Хитрини. Постоянна връзка.