Поиск_решения

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

kesar
Сообщения: 3
Зарегистрирован: 15 ноя 2006, 14:46

Подскажите, как в Excel решить такую задачу:
Есть куча слагаемых (в столбик) из этих слагаемых нужно выбрать те которые будут равнять или приблизительно равны фиксированной сумме.
Пробовал через поиск_решения - не получается. Т.к. у меня нет изменяемых параметров. А есть включение или исключение тех или иных ячеек в расчет.
Thunder
Сообщения: 57
Зарегистрирован: 24 окт 2006, 03:14
Контактная информация:

=СУММЕСЛИ(диапазон условий;">12000";диапазон для суммирования)
Это кнопочка fx, там выбрать математические..
Самоучка :)
Сима
Сообщения: 25
Зарегистрирован: 24 окт 2006, 23:30

Что значит приблизительно равны? То есть заданы какие-то диапазоны или отклонение в процентах?

В поиске решения идет перебор разных вариантов. Если вам нужен любой вариант из возможных, лишь бы в сумме дал нужное число, то подойдет способ, предложенный выше. А если бы из полученных вариантов вам нужно было бы выбрать наилучший и для этого у вас был бы критерий отбора (определяющий, какой вариант считать лучшим), тогда - поиск решения.
Еще мог бы подойти Подбор параметра.
Но так как у вас параметры не меняются произвольно, а фиксированы (заданы дискретным набором), то правильным решением будет использование СУММАЕСЛИ.
kesar
Сообщения: 3
Зарегистрирован: 15 ноя 2006, 14:46

Здесь нужен критерий (>12000 в Вашем примере).
=СУММЕСЛИ(диапазон условий;">12000";диапазон для суммирования)
У меня критерий все элементы.
Практически задача звучит так: есть счета (пусть их будет 100), из них нужно выбрать те, сумма которых максимально приближается к 1'000'000.
т.е. нужно перебрать все варианты суммирования этих счетов.
Можно ли это сделать формулами Excel без VBA.
Сима
Сообщения: 25
Зарегистрирован: 24 окт 2006, 23:30

А какая практическая цель? Ну, переберете вы все варианты счетов, в сумме которые дадут 1000000, и? Вы же потом будете их по какому-то принципу отсеивать? (выбирая лучший) или вам нужно выбрать один вариант, потом, исключив элементы, которые вошли в него, перебирать остальные счета и так далее по циклу?
tolikt
Сообщения: 93
Зарегистрирован: 29 окт 2005, 12:33
Откуда: NewVasюbirsk

Не очень понял ответы про СУММЕСЛИ, но видно, что нормального алгоритма для поиска возможных слагаемых для фиксированной суммы так и нет.

Я понял kesar так (для простоты лучше не говорить "максимально приближается к", а "точно равно" сумме).

Есть ряд чисел, например 1, 2, 3, 4. Нужно найти всевозможные варианты сумм этих чисел, чтобы в итоге получалось 6. Каждое число можно в одном варианте использовать только один раз.
В данном примере варианты получаюся такие: 1+2+3=6 и 2+4=6, т.е только два варианта: первый из трёх слагаемых, второй - из двух.

Наверное, давно есть какие-либо математические алгоритмы для поиска всех возможных вариантов. И давно есть, я думаю, реализация такого поиска на VBA. Но кроме тупого перебора, ничего в голову не приходит (комбинаторику я проходил ещё в 19 веке....). А тем более, как это реализовать в VBA.
Возможно, это уже обсуждалось, но поиск в данном форуме привёт только к этой теме. Да и не совсем понятно, какие критерии задавать для поиска.

Если у кого-то есть рабочий код для решения данной проблемы, подскажите.
Аватара пользователя
Mint86
Сообщения: 127
Зарегистрирован: 04 мар 2008, 11:47

ИМХО такие задачи решает "жадный алгоритм" В сети можно найти много таких.
Аватара пользователя
Mint86
Сообщения: 127
Зарегистрирован: 04 мар 2008, 11:47

Вот статья про жадный алгоритм:
http://window.edu.ru/window_catalog/fil ... _49-58.pdf
maxa
Сообщения: 59
Зарегистрирован: 15 июн 2006, 21:00

Задам вопрос здесь, не разводя тем. Как разбить по ячейкам формулой номер и серию св-ва о регистрации "86РВ956875". 1 ячейка -""86"", 2-я="РВ" и 3-я ="956875".
Ответить