Новости:

Из правил форума: Тема должна отражать суть вопроса, топики типа "help please" будут удаляться!

Главное меню

Задача на комбинаторику

Автор IKor, 15.08.2012, 15:55

« назад - далее »

IKor

Цитата: Михаил С. от 16.08.2012, 20:19
IKor
ЦитироватьТаким образом, мне нужно сгенерировать таблицу переменной ширины (зависит от количество слагаемых, указанных пользователем), каждая строка которой представляет собой один из вариантов сочетания порядковых номеров указанных векторов:
А макрос чем не устраивает? эта задача для макроса, формульное решение - только ради спортивного интереса, имхо конечно.
MCH
Единственное мое предубеждение перед макросами заключается в моем собственном неумении работать с ними. Все остальные доводы - по большей части лукавство.

Большое спасибо всем уделившим внимание этому вопросу.
Я и не предполагал, что задача окажется настолько сложной и интересной.
Тем не менее на основании предложенных вами решений у меня не осталось иллюзий о возможности решения моей задачи без помощи макросов - основным аргументом является время пересчета. Тем более, что сама матрица номеров используется в дальнейшем для решения задачи оптимизации затрат ресурсов для достижения конечного результата (мне нужны только самые "лучшие" из миллионов строк). Значит имеет смысл избежать долгоиграющей публикации промежуточных результатов, но решить и саму оптимизационную задачу внутри макроса: все, что сокращает время работы программы позволяет увеличить количество рассматриваемых столбцов (ресурсов)

Михаил С.

 
ЦитироватьIKor
Значит имеет смысл избежать долгоиграющей публикации промежуточных результатов, но решить и саму оптимизационную задачу внутри макроса:
Так а задача то какая? Разумеется, есть смысл искать лучшие варианты внутри макроса, без вывода промежуточных результатов, тем более,  что при таких объёмах они могут не поместиться на лист в один столбец.
Отдельное спасибо можно на QiWi-кошелек 909-771-53-87 или ЯД 41001136675053

Михаил С.

Цитата: MCH от 17.08.2012, 08:24
Ну и еще вариант до кучи
Миш, что то я не понял конструкцию Do Loop. A где While?
Смотрел справку, смотрел у Уокенбаха - ничего про умолчания не нашел :(
Отдельное спасибо можно на QiWi-кошелек 909-771-53-87 или ЯД 41001136675053

MCH

Цитата: Михаил С. от 19.08.2012, 22:03
что то я не понял конструкцию Do Loop. A где While?
While и/или Until вещь не обязательная
Выход из цикла идет по Exit Do

IKor

Цитата: Михаил С. от 17.08.2012, 11:33
Так а задача то какая? Разумеется, есть смысл искать лучшие варианты внутри макроса, без вывода промежуточных результатов, тем более,  что при таких объёмах они могут не поместиться на лист в один столбец.
Задачу можно сформулировать следующим образом:
Существует некоторый подлежащий улучшению предмет. Процесс улучшения может быть проиллюстрирован процентами: 0% до 100%. Процесс улучшения выполняется поэтапно: на каждом из этапов улучшения затрачивается некоторое фиксированное количество ресурсов, а также существует возможность потратить дополнительное количество ресурсов, улучшающих результат этапа.
Сами дополнительные ресурсы бывают трех разных типов, отличающихся эффективностью улучшения предмета.
Для каждого типа ресурсов в зависимости от используемого количества известны проценты улучшения предмета - существует таблица.
За один этап невозможно улучшить предмет от 0% до 100%. Поэтому процесс улучшения может быть приостановлен и в последствии начат не с 0, а с некоторого известного пользователю значения.
Собственно задача заключается в том, чтобы предоставить пользователю инструмент для анализа эффективности вложения того или иного количества ресурсов на нескольких этапах улучшения предмета, позволяющих достичь максимального значения (в идеале 100%) с учетом ограниченного количества ресурсов и с наименьшими их затратами.

Пояснения к прилагаемому в качестве иллюстрации файлу:
1. Есть таблица эффективности вложений ресурсов (слева)
2. Есть таблица вариантов вложения ресурсов (справа) - в ней тип ресурса и количество этапов выбирается пользователем, а количество ресурсов и соответствующий процент улучшения предмета определяется программно.
3. Количество строк в результирующей таблицы должно позволять представить все "лучшие" варианты...

MCH

Как определить эффективность?
есть ограничение исходных ресурсов (вар1 - 34, вар2 - 40)
Нужно получить максимальное суммарный процент (вар1 - 51, вар2 - 50)?

Либо нужно определить максимальную отдачу на затраченные ресурсы (51/34 и 50/40)?

IKor

Цитата: MCH от 20.08.2012, 18:17
Как определить эффективность?
Это очень хороший вопрос... собственно ради ответа на него и появилась вся эта задача.

Есть две крайности:
1. Исходя из имеющихся в наличии ресурсов (каждый раз количество разное, но известное пользователю) получается за несколько этапов улучшить предмет до 100%. В этом случае наиболее эффективным является наименее затратный процесс.
2. Существуют очевидно неэффективные варианты использования ресурсов, приводящие к неоправданно большому количеству этапов. Эти варианты могут быть сразу отброшены

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

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