Альтернатива поиску решения в excel

   DmSk

05.04.11 — 12:26

Ищу аналог «поиска решений» EXEL на 1С 7.7. Есть исходники на си, но переписывать долго.

   1Сергей

1 — 05.04.11 — 12:27

йоксель?

   1Сергей

2 — 05.04.11 — 12:27

хотя, нет. Что за «поиск решений» я хз

   skunk

3 — 05.04.11 — 12:30

   МихаилМ

4 — 05.04.11 — 12:31

сольвер использует метод градиентов.

время-деньги.
коли долго (нет времени) — закажите аутсорсерам.
но в виде вк — быстрее напорядки.

   DrZombi

5 — 05.04.11 — 12:32

(3)Еще их кличут «Анализ данных…» (Сервис -> «Анализ данных…»)…
(0)Так то это все рассчитываемо и без этих мастеров.

   Оболтус

6 — 05.04.11 — 12:32

Excel тогда уж…

   1Сергей

7 — 05.04.11 — 12:35

ни у кого не возник китайский вопрос?

   DmSk

8 — 05.04.11 — 12:43

(4) сколько примерно времени нужно чтобы в 1-го это сделать ?

   DmSk

9 — 05.04.11 — 12:44

(4) задача неясно поставлена, нужно именно прикладное решение, потому самому пыхтеть придется

   DmSk

10 — 05.04.11 — 12:45

(3) Чтобы получить более подробные сведения об используемых алгоритмах оптимального поиска, обратитесь по адресу:

Frontline Systems, Inc.
P.O. Box 4288
Incline Village, NV 89450-4288
(775) 831-0300
Адрес в Интернете: http://www.frontsys.com
Электронная почта: info@frontsys.com
очень помогло

   Denp

11 — 05.04.11 — 12:52

(0) вот нафига делать численные методы в проге, для этого не приспособленной? мне страшно представить, сколько будет искать решение 1С для нескольких переменных при более менее сложной функции.
пишите на 1с и выносите в ВК.

ЗЫ Поиск решений в Екселе — УГ

   Ахиллес

12 — 05.04.11 — 12:58

(11) Расшифруй. Что значит «пишите на 1с и выносите в ВК». Давно у нас в 1С компилятор встроен?

   Denp

13 — 05.04.11 — 12:59

(12) пардон. конечно, имел в виду в (11) «пишите на с++ и выносите в ВК»

   DmSk

14 — 05.04.11 — 13:06

   DmSk

15 — 05.04.11 — 13:06

написано специально для 1С

   Denp

16 — 05.04.11 — 13:07

(15) а какая задача исходно стоит? что надо оптимизировать?

   DmSk

17 — 05.04.11 — 13:13

(16) расчет состава рецепта комбикорма,
из условий,
1. что  полученное качество будет не хуже госта
2. процент вхождения каждого компонента состава в пределах от и до
3. Компоненты есть на складе, если компонента нет то есть список взаимозаменяемости компонентов

   dk

18 — 05.04.11 — 13:14

а по OLE в Excel запускать не вариант?

   Denp

19 — 05.04.11 — 13:14

(17) качество — это содержание белка?
взаимозаменяемость по условию, а не произвольная, сильно усложняет задачу

   DmSk

20 — 05.04.11 — 13:15

(18) плохой вариант

   DmSk

21 — 05.04.11 — 13:20

(19) каждый компонент (отруби и т.д.) имеет свой показетель питательной ценности, это обменная энергия, сырой протеин, клетчатка, Лизин, и т.д.
вот  в сумме  эти компоненты должны давать корм с пит ценностью, для протеина от 15 до 17% , для клетчатки до 9% и т.д.
с взаимозаменяемостью, задача вообще непонятно как стоит, ведь несколько компонентов можно заменить на один и тот же, пока буду опираться на практику, то есть на примеры решений технолога,а потом выведу метод . возможно комбинатоника пригодится

   DmSk

22 — 05.04.11 — 13:22

кроме того в формулу оптимизации цена стремится к минимуму, нужно предусмотреть чтобы можно было приготовить корм из остатков, чтобы свести конечный остаток к минимуму. так что задача классная !

   Denp

23 — 05.04.11 — 13:22

(21) а критерий оптимизации какой тогда? Стоиомсть?

   Fragster

24 — 05.04.11 — 13:24

в 1се есть какой-то анализ данных

   DmSk

25 — 05.04.11 — 13:28

(23) взависимости от выбора решения
если не нужно остатки подбивать, то стоимость -> МИн,
если нужно остатки подбить, то остатки на складе — >Мин

   DmSk

26 — 07.04.11 — 06:57

В общем компонента тупит(не находит решение), там где эксель справляется :(

   ASV

27 — 07.04.11 — 07:11

(26) исходные данные выложи

   DmSk

28 — 07.04.11 — 08:12

   DmSk

29 — 07.04.11 — 10:34

вот слил исходники с откомпиленным exe, тоже реализация метода, по примеру находит решение без проблем
http://hddfiles.ru/download/4915/

   DmSk

30 — 07.04.11 — 10:55

Вообщем, я так понял компонента использует метод Гомори,
ошибка в разных программах одна и таже «невозможно найти начальный базис», другими методами задача решается

   Кирпич

31 — 07.04.11 — 13:06

(0) Да тупого перебора хватит должно хватить. Даже если на 1С реализовать.

   Попытка1С

32 — 07.04.11 — 13:09

А я прям из 1с заюзал екселевский механизм поиска решений.

   ado

33 — 07.04.11 — 13:17

(8) Пара часов, если соответствующей математикой владеешь.

   Denp

34 — 07.04.11 — 13:18

(31) бугага

   Кирпич

35 — 07.04.11 — 13:38

(34) Чо ты ржешь?

   Denp

36 — 07.04.11 — 13:44

(35) какой перебор при нецелочисленной оптимизации нафих?
какая скорость перебора при нескольких переменных?
чо за фантазии?

   Кирпич

37 — 07.04.11 — 13:56

(36) Да ладна. Ничо там страшного нету.

   Eugeneer

38 — 07.04.11 — 13:57

Если бы 1С сделал свой эксель он бы быстро набрал бы популярность. Я бы точно купил.

   Denp

39 — 07.04.11 — 14:12

(37) теоретик?

   Кирпич

40 — 07.04.11 — 14:14

(39) Хуже

   DmSk

41 — 08.04.11 — 05:59

(39)(40)
если даже взять целочисленно дял каждоко компонента от 0..100, и этих компонентов будет 5,
то получим 100*100*100*100*100 = 10 000 000 000 комбинаций,
если ещё проверять ограничения их штук 8, взависимости от типа смеси.
представим что 1С за 1 секунду переберет 1000 варинатов (что врядли), получи  10 000 000 секунд, получим 115 дней :)

   Denp

42 — 08.04.11 — 06:39

(28) что за дурацкая мода выкладывать в xlsx?

ЗЫ все же МС — дебилы

   Кирпич

43 — 08.04.11 — 08:23

(41) Ну там можно не всё перебирать, а только то, что нужно. Автор объяснил бы поконкретнее, что именно нужно.

   Denp

44 — 08.04.11 — 08:24

(43) «можно не всё перебирать, а только то, что нужно»
гы) конгениально!) только это уже будет не «тупой перебор», как ты предлагал

   Кирпич

45 — 08.04.11 — 08:26

(44) Это будет тупой перебор того, что нужно. И не обещал я ничего. Я предположение высказал.

   DmSk

46 — 14.04.11 — 13:24

ну вот прошло 9 дней с момента поиска до реализации,
как ни странно компонента для 1С с http://www.openproj.ru/75/
не всё решала, ходя делфовый исходник в (написал прогу на дельфи) тестовые примеры выполняла. получилось, что
исходник на дельфи работает, а из компоненты не хочет.
Поскольку исходника компоненты небыло, пришлось самому писать, шаблон компоненты взял отсюда с мисты спасибо огромное всё довольно просто оказалось в создании компонент.
Далее из компоненты сделал лог, который показывал результаты, оказалось, что результаты сверхмалых величин разные (вот тут описал проблему В компоненте для 1С 7.7.на Delphi 6 получаются другие значение, чем на самом Del, перевел коэффициент погрешности в с -13 степени на -10 и всё пошло !!! Из-за того, что автор компоненты не учёл этого, пришлось изучить методику создания компоненты, + вспомнить математику, спасибо автору !

  

DmSk

47 — 14.04.11 — 13:32

чуть позже выложу исходники , для совместимости с предыдущей компонентой все названия методов оставл прежние

Возможно вы слышали о нобелевском лауреате, психологе и исследователе по имени Дэниель Канеман. Канеман занимался наукой, которую называют термином «поведенческая экономика», т.е. изучал реакции, поведение и суждения людей в типовых жизненных (и экономических) ситуациях и условиях неопределенности.

В его книге, которая называется «Думай медленно — решай быстро» (очень рекомендую, кстати) в качестве одного из примеров когнитивных искажений — несознательной автоматической реакции — приводится следующая задача:

Бейсбольная бита и мяч стоят вместе 1 доллар 10 центов.
Бита дороже мяча на 1 доллар.
Сколько стоит мяч?

Подозреваю, что вашей первой рефлекторной мыслью, скорее всего, будет «10 центов!»  :) Но весьма скоро, я уверен, вы сообразите, что на самом деле всё не так примитивно и для получения ответа нужно решить простую систему уравнений (здесь b — это бита, а m — это мяч):

Система линейных уравнений

Конечно можно «тряхнуть стариной» и решить всё вручную на бумажке через подстановку переменных — как-то так:

Решение системы уравнений через подстановку переменных

Но, во-первых, на практике уравнения могут быть сложнее и переменных может оказаться сильно больше двух и, во-вторых, у нас с вами есть Microsoft Excel — универсальный мега-инструмент, величайшее изобретение человечества. Так что давайте-ка лучше разберём как решить нашу задачу с его помощью.

Способ 1. Матричные функции МУМНОЖ и МОБР

Само собой, изобретать велосипед тут не надо — прогрессивное человечество в лице математиков давным-давно придумало кучу способов для решения подобных задач. В частности, если уравнения в нашей системе линейные (т.е. не используют степени, логарифмы, тригонометрические функции типа sin, cos и т.д.), то можно использовать метод Крамера.

Сначала записываем числовые коэффициенты, стоящие перед нашими переменными в виде матрицы (в нашем случае — размером 2х2, в общем случае — может быть и больше).

Затем находим для неё так называемую обратную матрицу , т.е. матрицу, при умножении которой на исходную матрицу коэффициентов получается единица. В Excel это легко сделать с помощью стандартной математической функции МОБР (MINVERSE):

Вычисляем обратную матрицу

Здесь важно отметить, что если у вас свежая версия Excel 2021 или Excel 365, то достаточно ввести эту функцию обычным образом в первую ячейку (G7) — сразу получится динамический массив с обратной матрицей 2х2. Если же у вас более старая версия Excel, то эту функцию нужно обязательно вводить как формулу массива, а именно:

  1. Выделить диапазон для результатов — G7:H8
  2. Ввести функцию =МОБР(B7:C8) в строку формул
  3. Нажать на клавиатуре сочетание клавиш Ctrl+Shift+Enter

Замечательное свойство обратной матрицы состоит в том, что если умножить её на значения правых частей наших уравнений (свободные члены), то мы получим значения переменных, при которых левые и правые части уравнений будут равны, т.е. решения нашей задачи. Выполнить такое матричное умножение можно с помощью ещё одной стандартной экселевской функции МУМНОЖ (MMULT):

Решение системы линейных уравнений

Если у вас старая версия Excel, то не забудьте также ввести её в режиме формулы массива, т.е. сначала выделить диапазон K7:K8, а после ввода функции нажать сочетание клавиш Ctrl+Shift+Enter.

Само собой, уравнений и переменных может быть больше, да и посчитать всё можно сразу в одной формуле, вложив используемые функции одна в другую:

Решение системы из 3 уравнений

Не так уж и сложно, правда? Однако надо понимать, что этот метод подходит только для решения систем линейных уравнений. Если у вас в уравнениях используются функции посложнее четырех базовых математических действий, то зачастую проще будет пойти другим путем — через подбор.

Способ 2. Подбор надстройкой «Поиск решения» (Solver)

Принципиально другой способ решения подобных задач — это итерационные методы, т.е. последовательный подбор значений переменных, чтобы после подстановки их в наши уравнения мы получили верные равенства. Само собой, подбор имеется ввиду не тупой и долгий (брутфорс), а умный и быстрый, благо математики, опять же, давным-давно придумали кучу различных методов для решения таких задач буквально за несколько итераций.

В Microsoft Excel некоторые из этих методов реализованы в стандартной надстройке Поиск решения (Solver). Её можно подключить через Файл — Параметры — Надстройки — Перейти (File — Options — Add-ins — Go to) или на вкладке Разработчик — Надстройки (Developer — Add-ins)

Давайте рассмотрим её использование на следующей задаче. Предположим, что нам с вами нужно решить вот такую систему из двух нелинейных уравнений:

Система нелинейных уравнений

Подготавливаем основу для оптимизации в Excel:

Модель для оптимизации

Здесь:

  • В жёлтых ячейках C9:C10 лежат текущие значения наших переменных, которые и будут подбираться в процессе оптимизации. В качестве стартовых можно взять любые значения, например, нули или единицы — роли не играет. Для удобства, кстати, этим ячейкам можно дать имена, назвав их именами переменных x и y, — для этого выделите диапазон C9:C10 и выберите команду Формулы — Создать из выделенного — Слева (Formulas — Create from selection — Left column)
  • В зелёных ячейках E9:E10 введены наши уравнения с использованием либо прямых ссылок на жёлтые ячейки переменных, либо созданных имён (так нагляднее). В результате мы видим, чему равны наши уравнения при текущих значениях переменных.
  • В синих ячейках F9:F10 введены значения правых частей наших уравнений, к которым мы должны стремиться.

Теперь запускаем нашу надстройку на вкладке Данные — Поиск решения (Data — Solver) и вводим в появившемся диалоговом окне следующие параметры:

Надстройка Поиск решения в Excel

  • Оптимизировать целевую функцию (Set target cell) — любая из двух наших зелёных ячеек с уравнениями, например E9.
  • Изменяя ячейки переменных (By changing cells) — жёлтые ячейки с текущими значениями переменных, которыми мы «играем».
  • Добавляем ограничение с помощью кнопки Добавить (Add) и задаём равенство левой и правой части наших уравнений, т.е. зелёного и голубого диапазонов.
  • В качестве метода решения выбираем Поиск решения нелинейных задач методом ОПГ, т.к. уравнения у нас нелинейные. Для линейных можно смело выбирать симплекс-метод.

После нажатия на кнопку Найти решение (Solve) через пару мгновений (или не пару — это зависит от сложности задачи) мы должны увидеть окно с результатами. Если решение найдено, то в жёлтых ячейках отобразятся подобранные значения наших переменных:

Найденное решение системы уравнений в Excel

Обратите внимание, что поскольку мы здесь используем итерационные, а не аналитические методы, то зеленые ячейки не совсем равны голубым, т.е. найденное решение не абсолютно точно. На практике, конечно же, такой точности вполне достаточно для большинства задач, и если необходимо, её можно настроить, вернувшись в окно Поиск решения и нажав кнопку Параметры (Options).

6 / 6 / 3

Регистрация: 23.06.2012

Сообщений: 51

1

14.03.2015, 08:51. Показов 4555. Ответов 6


Студворк — интернет-сервис помощи студентам

Всем доброго времени суток. Хотелось бы узнать, возможно ли создать аналог надстройки «Поиск решений» из Excel на VB.NET? Если да, то как.
Также интересно, возможно ли «привинтить» данную надстройку в программу, если создать её гораздо сложнее/невозможно.

Если есть специалист, разбирающийся в принципах работы данной надстройки, то с радостью приму от него информацию о том, по каким принципам и алгоритмам она работает, т.е. какие уравнения там используются и т.п.

Заранее спасибо всем.



0



2079 / 1232 / 464

Регистрация: 20.12.2014

Сообщений: 3,237

14.03.2015, 09:42

2

Цитата
Сообщение от Ruswolf
Посмотреть сообщение

по каким принципам и алгоритмам она работает, т.е. какие уравнения там используются и т.п.

Когда-то давно делал реализацию поиска решения на VBA. В интернете есть информация по этому поводу. Нашел тогда практически весь код. Ссылки, к сожалению не сохранил, но помню, что искал не долго. А уж переделать программу с VBA на VB.NET, думаю, вполне реально.



0



6 / 6 / 3

Регистрация: 23.06.2012

Сообщений: 51

14.03.2015, 10:26

 [ТС]

3

К сожалению, с VBA я не знаком. Если и найду информацию, то нужно будет повтыкать ещё в код VBA, но, думаю, я разберусь. Жаль, что ссылки не сохранены, очень пригодились бы.



0



6 / 6 / 3

Регистрация: 23.06.2012

Сообщений: 51

14.03.2015, 15:20

 [ТС]

5

Спасибо за ссылку. С ней всё кажется попроще.

А нужно ли подключать библиотеку VBA в проект, чтобы использовать код VBA? Или код нужно переработать под VB.NET? Или сделать и то, и другое?



0



2079 / 1232 / 464

Регистрация: 20.12.2014

Сообщений: 3,237

14.03.2015, 21:47

6

Мне кажется библиотеку подключать надо, потому что там специфические функции, ну и код, естественно, придется чуть подправить. Всё-таки vba и vb.net отличаются. Вот, еще ссылку нашел, правда там на английском всё, но перевести переводчиком, я думаю, сможете. Насколько я понял — это что-то типа поиска решения на разных языках программирования. Или, даже, надстройки для разных языков.
http://www.solver.com/solver-p… ort#VB.NET



1



6 / 6 / 3

Регистрация: 23.06.2012

Сообщений: 51

15.03.2015, 20:13

 [ТС]

7

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Огромное спасибо за ссылки. Теперь буду пытаться разобраться с ломаным машинным переводом и кодом. Очень надеюсь, что смогу разобраться без особых сложностей.

Добавлено через 7 часов 38 минут
Если кому-то будет интересно, то вот статейка, в которой кратко описывается библиотека для подключения Excel Solver (рус. «Поиск решения»).
http://habrahabr.ru/company/microsoft/blog/118593/



1



Аналог «поиск решения» для ГУгл Екселя?

Подскажите аналог стандартному в EXCEL «Поиск Решения»
Для Гугл Excel.
По сути как добавить в гугл ексель «поиск Решения»


  • Вопрос задан

    более трёх лет назад

  • 8773 просмотра

Подозреваю, что такого функционала в Гугл таблицах — нет. Тем не менее, вполне можно написать js макроc, который будет выполнять нужные операции.

Пригласить эксперта


  • Показать ещё
    Загружается…

15 апр. 2023, в 07:16

1000 руб./за проект

15 апр. 2023, в 04:50

7000 руб./за проект

15 апр. 2023, в 03:28

5000 руб./за проект

Минуточку внимания

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Добрый день!
Прошу помочь с формулой, голова кипит)

Мне необходимо, чтобы в одной ячейке выводился процент, который в свою очередь зависит от 3 критериев.
Например: условие 1 -ДА, условие 2 — ДА, условие 3 — ДА, то выводится 20%. Если условие 1 -ДА, условие 2 — НЕТ условие 3 — НЕТ, то выводится 10% и т.д.
Сложность в том, что вариантов этих критерии у меня 7, а выводиться все должно в одной ячейке.
Функция ЕСЛИ выдает ошибку, что слишком много аргументов для этой функции.

К сообщению приложен файл:

9435851.xlsx
(10.1 Kb)

Понравилась статья? Поделить с друзьями:
  • Альтернатива word для андроид
  • Альтернатива word для mac
  • Альтернатива word для iphone
  • Альтернатива word для ipad
  • Альтернатива word office для windows 10