Автор Тема: Софтуер за изработване на комбинации  (Прочетена 7155 пъти)

Naka

  • Участник
  • *****
  • Публикации: 2637
    • Профил
Re: Софтуер за изработване на комбинации
« Отговор #30 -: Юли 18, 2018, 10:31 »
Въпрос - Крайната сума трябва ли да съвпада с точност до стотинка?

Между другото се сещам за един хинт.
Ако крайната цифра (в цената) е 1 или 9 то при събирането последната цифра на сумата може да приема всяка една цифра 0,1,2,3,4,5,6,7,8,9.

за 1 е ясно. Не случайно имаме 1 стотинка монета. За 9 обаче не е.
например:

1.49лв *1 = 1.49
1.49 * 2 = 2.98
1.49 * 3 = 4.47
1.49 * 4 = 5.96
1.49 * 5 = 7.45
1.49 * 6 =  8.94
1.49 * 7 = 10.43
1.49 * 8 = 11.92
1.49 * 9 = 13.41
1.49 * 10 = 14.90
1.49 * 11 = 16.39

Това не е така с числа завършващи на другите цифри. Например 1.45 както и да го събираме все ще получаваме кратно на 0 или 5.

Мисълта ми е такива цени завършващи на 1 или 9 (1.41 или 1.49) и малки по стойност да се използват във вътрешните цикли. Така по лесно ще може да се наглася поне крайната стотинка >:D





 
« Последна редакция: Юли 18, 2018, 10:42 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

4096bits

  • Участник
  • *****
  • Публикации: 3145
    • Профил
Re: Софтуер за изработване на комбинации
« Отговор #31 -: Юли 18, 2018, 10:37 »
Имаше едни задачи, как в камион с определен обем товарно пространство или тонаж, да се натовари стока с оптилно отношение към обема/теглото на товара към цената. Ма не помня, как се правеше. Иначе може да се стъкми нещо с machine learning, ма и това не съм правил.
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

ddantgwyn

  • Global Moderator
  • Участник
  • *****
  • Публикации: 1092
    • Профил
Re: Софтуер за изработване на комбинации
« Отговор #32 -: Юли 18, 2018, 10:49 »
Джет и аз нещо такова си го представях в началото. Тогава опирам единствено до това, колко случаен да е всеки фактор, така, че да имам „нормално разпределение“ на стоката в края. Сиреч не от едно да съм продал много, а от друго нищо. Ето тук според мен е ролята на съветските учени Нагоденко и Нагласенко.

=*=

4 кб, Autohotkey прави нещо много просто. То просто щрака по екрана и дава вход от клавиатура. Подобна симулация има вградена в XWindow с цел за изпитания.

Аутохоткей обаче е създаден с друга цел. Понеже Windows по подразбиране е „non scriptable“ то се търсят начини за автоматизация. И понеже почти всичко е графична програма, то затова се ползват и толкова странни методи.

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

И понеже в никакъв случай не съм безгрешен, първоначално мислех да го избегна, като пиша направо в базата през ел. таблица. Тогава Ремо (на лични) ме охлади, че вътре сигурно е пълно с изчислими полета (както се и оказа в последствие), а закръглянията няма шанс да ги докарам същите. И той я измъкна от някъде тази програма.

С напредване на кариерата ми, се оказа, че в онази програма не можеш да вкарваш неща неподготвен. Първо трябва си сигурен, какво точно ще вкараш и след това да го вкараш. Колежките ми са възпитавани в старата школа (макар сред тях да има двадесет годишни) и правят нещото на ръка, на лист, с елка и молив.

Аз обаче съм роден след седемдесетте години на миналия век, сиреч по времето, когато вече е имало електронни таблици. И поради тази причина избягвам да правя, какво да е на ръка.

И така опряхме до случая, в който ми повериха най-тежкия склад. Този склад преди е правен от две жени в продължение на месец. Забележи били са млади, нераждали и бързи като в светкавици. Аз за да докарам заплатата си, трябва да го правя за няколко дни, сам. Аз съм бавен в мисълта, бавен в ръцете, изобщо спрял еволюцията си. И да спя там, все тая. Времената са се променили, но обема работа не е.

Та понеже се отклоних. Въпросния cvs просто представлява списък, какво след какво трябва да се щракне. Сиреч, когато имам готови за въвеждане данни, е много лесно между тях да вкарам с vba вълшебни думички като <tab> и <enter>, самите данни да обвия в кавички и да стане магия.

=*=

Ремо! ТИ ЖИВЕЕШ В НОРМАЛНИЯ СВЯТ! Добре дошъл в реалния. Или по-точно грозната реалност в милата ни татковина. Тук нищо не е нормално. Добре, програмистите ни са нормални, но те са изключение.

Въпросния обект съдържа десет или двадесет хиляди артикула. Никой не знае точната бройка. Защото артикулите в нашата база са разделени по цени, но зад това спокойно се крият от два до двадесет (почти) подобни (незадължително) взаимозаменими артикула.

Никой не знае реалните наличности от нищо там. Понеже това не са храни (не е развалима стока) и не е техника (не остарява морално), то няма проблем нещо да седи с години. Единствения проблем е, че имаме пишман бизнесмен, който вярва, че прави нещо.

За да се установи, какво има, то трябва да се направи инвентаризация в рамките да речем на месец. Не съм убеден, че последните двадесет години там е правена дори една инвентаризация. Какво остава да се прави всеки месец. Шибания Кауфланд прави всеки месец инвентаризация във всеки свой обект (имат над 50).

=*=

Не ме интересува, какво пише на фактурите в брой. Те влизат в бройката на касовия апарат. А и в 99,999% от случаите там пише – продадени стоки. Това е така, защото СЕ ПИШАТ НА РЪКА!

Още ли си жив? Защото аз не съм. Имаш 20 хил. артикула, с обща наличност, която не мога да си предсавя (защото е нормално от едно нещо да са от няколко десетки до няколко стотици бройки), нямаш компютър и пишеш фактури от кочан!!! Аз говоря за баркодове. Нещо съм слънчасал.

Така опираме до ситуация, в която имаме точна, пълна, ясна, изчерпателна информация, какво е влязло в склада, но никой, вкл. собственика няма никаква идея, какво е излязло. Знае се приблизително, ама толкова приблизително, че чак е отдалечително.

Добре, как аджеба се правят заявки?!

Дръж се да не паднеш. Шефе, а бе еди кое си ми намалява. Ей онова ми го търсят (ама това се сещаш е субективно). Или шефа просто е видял нещо на тънкаж (прѝмоцийка) и оти да не го купи. Е, ама сега трябва и да го продаде. Подробности.

А аз някак си трябва да докарам цялото безумие до това, че еди кой си код са продадени еди колко си бройки за еди колко си пари.

Чакай момент! Това не беше ли същата информация, която се съдържа в касовия бон на края на месеца??? Ами беше. Само дето трябва от 40 неща да ги разпръсна на 4 000.

После питай, защо работим на никакви такси срещу смешни заплати. С такива клиенти е цяло чудо, че изобщо успяват да съберат пари за такса.

Описания случай е най-тежкия ни случай, но и другите не са по-стока.

От всичко написано по-горе, оставам с усещането, че трябва да решиш тези две задачи:

1. да разпределиш някаква крайна сума между краен брой цени, тоест да намериш такава комбинация от единичните цени, която да ти дава крайната сума, като една единична цена може да се среща повече от един път, даже е желателно да е така.

2. да разпределиш така намерената комбинация от единични цени между различните артикули с еднаква цена

Нормално разпределение на цените, означава грубо казано, че артикулите с цени в двата края на интервала (най-ниски и най-високи) се срещат по-рядко, отколкото тези с цени около средата на интервала.

Нямам идея доколко продажбите на която и да е фирма имат някакво нормално разпределение. така че е добре да го провериш това. За мен по-скоро нямат нормално разпределение, но понеже съм прост инженер, може и да греша.
Активен

--
the lamer's team honourable member

ddantgwyn

  • Global Moderator
  • Участник
  • *****
  • Публикации: 1092
    • Профил
Re: Софтуер за изработване на комбинации
« Отговор #33 -: Юли 18, 2018, 10:57 »
Въпрос - Крайната сума трябва ли да съвпада с точност до стотинка?

Доколкото ги знам счетоводителите — трябва :)
Активен

--
the lamer's team honourable member

ddantgwyn

  • Global Moderator
  • Участник
  • *****
  • Публикации: 1092
    • Профил
Re: Софтуер за изработване на комбинации
« Отговор #34 -: Юли 18, 2018, 10:59 »
Имаше едни задачи, как в камион с определен обем товарно пространство или тонаж, да се натовари стока с оптилно отношение към обема/теглото на товара към цената. Ма не помня, как се правеше. Иначе може да се стъкми нещо с machine learning, ма и това не съм правил.

Това е друго.

И засега не сме стигнали до там Наката да намери оптимално решение. Нека първо се намери някакво работещо решение, пък после, ако трябва, ще се търси неговата оптимизация (imho).

Или казано с други думи — първо трябва да намерим целевата функция, а после да я оптимизираме.
Активен

--
the lamer's team honourable member

Naka

  • Участник
  • *****
  • Публикации: 2637
    • Профил
Re: Софтуер за изработване на комбинации
« Отговор #35 -: Юли 18, 2018, 11:15 »
За вендинг машината какво си мисля. Там алгоритъма работи с целочислени числа, щото монетите са цели стойности. А той работи с числа с запетайка 1.49лв.
Но това не е голям проблем, просто може да умножи всичко по сто и вместо с левчета да работи само в стотинки.

new Coin(149, 100),
new Coin(5023, 10),
new Coin(201, 25),

Проблема според мен е друг. Вендинг алгоритъма доколко разбирам се стреми да минимизира броя монети (артикули) от които да се получи сумата. Т.е много артикиули ще имат 0 продажби. На него това не му трябва. Престави си
набиеш наличностите и цените на 200 артукула.
new Coin(149, 100),
new Coin(5023, 100),
new Coin(201, 100),
....
..
пуснеш алгоритъма и той каже , хоп готово. тази сума се получава само от комбинация на 5 артикула.

Но може да се опита да видим какво ще стане. ??? Тъй и тъй е готово. 



« Последна редакция: Юли 18, 2018, 11:31 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

go_fire

  • Участник
  • *****
  • Публикации: 5211
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Софтуер за изработване на комбинации
« Отговор #36 -: Юли 18, 2018, 13:07 »
На въпросния монетен апарат, това е едно от двете неща, които ми допадат. Стреми се с най-малко артикули (монетки) да получи крайно съотношение.

За мен това е добре, защото са по-малко на брой записи. Все още не е ясно дали накрая все пак няма да въвеждам резултата на ръка. По-малко записи са по-малко време, което и без това не ми се плаща. Аз споменах ли, че нищо от това не се плаща??? Това е труд за прошка от небесата. Нито аз, нито работодателя ми, печелим. Въпроса е да минимизираме загубата.

Второто, което ми харесва е, че тръгва от скъпите неща. В нормалния живот е точно обратното. По-евтиното винаги ще се харчи повече и на всякъде, не само в бедната ни татковина.

Но тънката врътка е, че по-скъпите неща имат по-малка надценка. Така изкарвам по-малка печалба, респетивно по-малък данък. Нашите клиенти са много свидливи и не обичат да плащат.

А може и да не вярвате, но ако нещо струва 20 ст., то най-вероятно надценката му е 20 ПЪТИ. Ако струва 100 лв., то е много възможно надценката му да е 10%.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

Naka

  • Участник
  • *****
  • Публикации: 2637
    • Профил
Re: Софтуер за изработване на комбинации
« Отговор #37 -: Юли 18, 2018, 14:32 »
На въпросния монетен апарат, това е едно от двете неща, които ми допадат. Стреми се с най-малко артикули (монетки) да получи крайно съотношение.

За мен това е добре, защото са по-малко на брой записи. Все още не е ясно дали накрая все пак няма да въвеждам резултата на ръка. По-малко записи са по-малко време, което и без това не ми се плаща. Аз споменах ли, че нищо от това не се плаща??? Това е труд за прошка от небесата. Нито аз, нито работодателя ми, печелим. Въпроса е да минимизираме загубата.

Второто, което ми харесва е, че тръгва от скъпите неща. В нормалния живот е точно обратното. По-евтиното винаги ще се харчи повече и на всякъде, не само в бедната ни татковина.

А как ще се реши въпросът, че броят издадени монетки трябва да съответстват на броя продажби N във финансовият отчет?

Или трябва някакси да се модифицира алгоритъма, че да продължи да търси докато се изпълни и това условие?
« Последна редакция: Юли 18, 2018, 14:34 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

stealth01

  • Участник
  • *****
  • Публикации: 665
  • Distribution: Debian testing
  • Window Manager: KDE
    • Профил
Re: Софтуер за изработване на комбинации
« Отговор #38 -: Юли 18, 2018, 17:01 »
Сериозно мислене пада тук. Връзки за четене и т.н. Извинявам се, че не съм прочел всичко, но да метна и аз нещо.

go_fire, имаш ли (можеш ли да вземеш и обработиш лесно) данни от минал период? Или дори да не е от минал период - началните стойности за периода.
Имаме, примерно, продажби за миналата година на N-ският артикул с количество X и стойност Y. Имаме продажби за текущият месец на стойност Y', съответно за въпросният месец ще имаш продадено количество X', което е равно на (X*Y')/Y. Тоест получаваме някакво количество базирано на стойности от предишни периоди. Което с всички условности е приемлив резултат за стъкмистиката. А условности много. Когато базираме изчисленията си на някакви предишни стойности трябва да вземем предвид дали включват ДДС и/или печалба, и ако да, да го отразим във формулата. С количествата също трябва да се внимава - по-лесно ще се смятат, ако са цели числа (и закръгляме до по-малко), но е възможно да има артикули, които се продават на кг./л./м. и т.н., които не са цели. Точно те пък могат да помогнат за доизкусуряването на точен резултат в края.
Активен

go_fire

  • Участник
  • *****
  • Публикации: 5211
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Софтуер за изработване на комбинации
« Отговор #39 -: Юли 18, 2018, 18:25 »
Ами той миналия период е правен пак по схемата Нагоденко. Иначе имам за последните шест години данни. Това, което казваш е отлична отправна точка за проследяване на продажбите, ако тези продажби са истински. И е задължително условие за вземане на решения. Но у нас това е само в книжките по бизнес-статистика.

Нака може би аз не съм разбрал как работи „монетния апарат“. От съвсем повърхностното четене останах с впечатление, че е това е алгоритъм подобен на алгоритмите на банкоматите. Но сега се сещам, че те банкоматите, че и монетните апарати са едномерни пространства, а аз работя в двумерно.

Освен, че трябва да докарам парите до стотинка, то трябва да наглася и бройките. Което ме навежда на мисълта, че трябва да гоня парите само приблизително, а бройките точно. Това приблизително да е малко под желаното. След, което да завиша с някакъв процент всички продажби, така, че да докарам и парите.

Обаче това ме вкарва в хипотезата да му изкарам по-голяма печалба от реалната. Може би трябва да направя обратното. Малко (възможно най-малко) да надвиша парите и да свалям. така, че да не избягам от действителната норма на печалба.

п.п. За щастие точно в този случай нямаме насипна стока и всички мерки са точни единици.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

luda_glawa

  • Участник
  • *****
  • Публикации: 649
  • Distribution: Kubuntu
  • Window Manager: KDE
    • Профил
    • WWW
Re: Софтуер за изработване на комбинации
« Отговор #40 -: Юли 19, 2018, 09:45 »
go_fire, я ги накарай да направят една бърза ревизийка на склада и сравни наличностите преди и сега :D
Активен

С Уважение:

Luda Glawa ;-)

Naka

  • Участник
  • *****
  • Публикации: 2637
    • Профил
Re: Софтуер за изработване на комбинации
« Отговор #41 -: Юли 19, 2018, 11:05 »
Цитат
Но сега се сещам, че те банкоматите, че и монетните апарати са едномерни пространства, а аз работя в двумерно.

Освен, че трябва да докарам парите до стотинка, то трябва да наглася и бройките. Което ме навежда на мисълта, че трябва да гоня парите само приблизително, а бройките точно. Това приблизително да е малко под желаното. След, което да завиша с някакъв процент всички продажби, така, че да докарам и парите.

Заначи това дето ти го предложих върти (първо) комбинации по бройките - по n-овете а след това гледа парите дали ще излязат на някоя комбинация. Ако имаш в предвид това за многомерно - то е едномерно, щото върти по n.
(Само сега да не пръкне някой подкован математик и да каже че и двамата сме в грешка и било N-мерно пространство :o)

Предлагам ти следният варянт:

n1 [90-110]   
   n2 [ 40-50]
      n3 [10-20]
          n4 []
          if ( N != (n1 +n2 +n4 +n4) ) continue;

           n1*s1 + n2*s2 + n3*s3 + n4*s4
           равно ли е (прилича ли) на S?
         


В най-вътрешният първо отхърляш всични невъзможни комбинации за N.
След това смяташ сумата S. Ако прилича на S изпринтваш n1, n2, n3, n4 - това е едно от решенията.

В най-външният цикъл задаваш предполагаемите бройки продажби [90-110]  от 90 до 110 бройки, които трябва да върти за най-скъпият артикул.

Във следващият [ 40-50] на следващият по-малко скъп но все още ценен и т.н.
А в най-вътрешният са най дребните артикули с най-ниска цена и за тях може ако искаш изобщо да не задаваш тесен интервал на симулация ами да си бъде [0 - бройката_в–склада].

 

Като задаваш началите условия в интервал, така както на око преценяш кое от колко се продало, пускаш една симулация и чакаш докото извърти и изпише възможна комбинация за цената.

--------
Сега тука има едно Но:
Така със вложени един в друг цикли се извъртяват всички възможни комбинация. Това си е един брояч - подобен на километража на колите......

Но от практическа гледна точка за 100 артикула не може да имаш 100 вложени цикъла един в друг. Предполагам че това с вложените цикли може да се опише програмнно по друг начин. Някой тук от спецовете по програмиране ще знае как става.

Може би с рекурсия (но мен от рекурсия ме боли глава).




« Последна редакция: Юли 19, 2018, 14:03 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

go_fire

  • Участник
  • *****
  • Публикации: 5211
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Софтуер за изработване на комбинации
« Отговор #42 -: Юли 19, 2018, 12:45 »
go_fire, я ги накарай да направят една бърза ревизийка на склада и сравни наличностите преди и сега :D

Не възможно. Такава инвентаризация би била минимум седмица при тези първобитни условия. И защо? За да само след месец отново да имаме грешни данни.

=*=

Нака. Не знам за другите езици, но в Пърл категорично работи с до два вложени цикъла. Станат ли три, Пърл умира. Със сигурност твоето решение е разбираемо и просто. Чак се чудя, как сам не съм се сетил за него.

А ракурсията е само научна джвачка. В реалния свят е неприложима. Макар в последната Мария да се появи. Но никой не казва, колко бързо вади резултат.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

Naka

  • Участник
  • *****
  • Публикации: 2637
    • Профил
Re: Софтуер за изработване на комбинации
« Отговор #43 -: Юли 19, 2018, 13:06 »
Пърл категорично работи с до два вложени цикъла. Станат ли три, Пърл умира.

Аде бе :o Не може да е вярно ??? Аз пърл го зарязах още преди 20 години.
Но със сигурност има начин как циклите да се представят по друг начин.
« Последна редакция: Юли 19, 2018, 13:08 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

Naka

  • Участник
  • *****
  • Публикации: 2637
    • Профил
Re: Софтуер за изработване на комбинации
« Отговор #44 -: Юли 19, 2018, 14:28 »
Дойде ми на ъкъла още една идея.

Разделяш си сумата на две части S=S1+S2
S(N)= S1(N1) + S2(N2)   Като N=N1+N2

Първата сума S1 си я правиш на ръка, така като ти е кеф, с колкото си искаш и с каквито си искаш артикукули, без да се интересуваш точно колко ще излезе цената и броят артикули в нея.

Важното е обаче S1 да е по-малко от карайната сума S и бройките в нея N1 да са по малко от N.

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

Ами Тази S2,N2 и остатъчните артикули ги пускаш на симулация. Ако може да минеш с 5-6 вида артикули???? - повече дребни парчутийки, но с разнообразни стойности.


-----------------------------------------------------
ПС: между другото това е аналогично на
n1 [92]   
   n2 [ 112]
      n3 [47]
          n4 []
          if ( N != (n1 +n2 +n4 +n4) ) continue;

           n1*s1 + n2*s2 + n3*s3 + n4*s4
           равно ли е (прилича ли) на S?


Ако на първите цикли зададеш фиксирани стойности.
« Последна редакция: Юли 19, 2018, 15:56 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.