2015-07-23 1 views
0

Моя книга немного сложна, но основная проблема может быть проиллюстрирована кратким примером.Пусть Excel Solver работает с натуральными номерами

Давайте предположим, что у меня есть 5 ячеек в Excel: A, B, C, D и E.

A = 0 
B = 5 * A 
C = 0 
D = 10 * C 
E = B + D 

В функции Excel Solver я выбираю ячейки E в качестве цели, которая должна быть максимально, и клетки A и C в качестве переменных клеток. Кроме того, я добавляю ограничение, что ячейка E не должна превышать 10, а второе ограничение состоит в том, что ячейки A и C должны быть целыми числами.

Идеальное решение состоит в том, что значение в ячейке A должно быть 0, а значение в ячейке C должно быть 10. Однако в более сложной версии этой проблемы Excel не может найти необязательное решение.

То, как выглядят текущие формулы, я ожидаю, что Excel может найти правильное решение, если excel использует только натуральные числа, чтобы найти оптимальное решение. Например, Excel в настоящее время будет рассматривать результат для A = 0,01 и C = 9,99. Вместо этого Excel должен строго сравнивать результаты для переменных вариантов, таких как A = 1 и C = 9.

Как заставить функцию решателя Excel работать только с натуральными номерами?

ответ

1

Я предлагаю вам сохранить текущие ячейки и создать зеркало рядом с ними. Каждая зеркальная ячейка будет равна округленной версии исходной ячейки. то есть: RoundedA будет иметь формулу:

=ROUND(A,0) 

Затем, когда вы делаете анализ ваших данных, решения для закругленной версии этих клеток, с изменением переменной является одним из «оригинальных» клеток.

EDIT Как обсуждается ниже, вам может потребоваться «обмануть» проверку данных для создания требуемых значений.

Предположим, что A1 будет вашей «тестовой» ячейкой проверки данных. B1 является постоянно пустой ячейкой. Установите другую ячейку, скажем, C1, равную:

=randbetween(1,10) 

Это создаст случайное число между 1 и 10. Установите «переменную» ячейку равной С10. Таким образом, ваша переменная ячейка всегда будет случайным числом между 1 & 10 (или вы можете установить «1» равным наименьшему числу ваших других переменных, а «10» равно наибольшему числу ваших других переменных. объем, необходимый для ответа на ваш вопрос).

Затем, когда вы выполните проверку данных, попробуйте получить A1 = TRUE. Сделайте это, выясняя, что такое «тестовое» состояние ваших ячеек. Что-то вроде «когда X = 0, я знаю, что все мои переменные правильные». то есть установить A1 до:

=if(X=0,1,0) 

Затем сделайте проверку данных путем изменения B1 (болванку, unrefered к клетке), не дожидаясь, пока А1 = 1. Имеет ли это смысл? Он превратит C1 в случайную циклическую переменную между LOWVALUE и HIGHVALUE, всегда используя целые числа. Проверка данных прекратится, когда A1 = 1 (что происходит при некотором значении X = 0). B1 будет просто вращаться бесполезно до тех пор, пока проверка данных не найдет что-то (или она остановится после нескольких сотен попыток, если ничего не найдет).

+0

Хорошая идея! Реализовал это сразу. Однако следующая проблема заключается в том, что функция solver прекращает оптимизацию и сохраняет все значения в «0», считая, что это оптимально, поскольку все варианты от 0.0000001 до 0.4999999 округлены до 0 и, по-видимому, не улучшаются. Какие настройки для функции решателя могли бы избежать этого поведения? –

+0

@TimoKrall Есть несколько способов решить эту проблему, которая может работать. Работа по проверке достоверности данных основана на «то, что, кажется, работает», и, как вы укажете, может слишком медленно увеличиваться, чтобы фактически найти точное значение, если мы округляем результаты. Попробуйте либо: (1) вручную ввести «приближение» вручную перед запуском. Это даст ему указание на величину количества, необходимое для решения. (2) вы можете «обмануть» проверку данных, сделав ее бесполезно запущенной в фоновом режиме, пока генератор случайных чисел прокручивается. Я отвечу на примере этого в своем ответе. –

+0

Интересный метод. К сожалению, метод randbetween (0,3) не работает, потому что разумные значения изменяются только между 0 и 3 для каждой из 21 ячейки. Однако ограничение состоит в том, что общая сумма значений не должна превышать 6. Вероятность того, что 21 значение случайным образом вычерчена, так что 6 не превышает, однако, очень мала. Поэтому большинство случайных сравненных значений не удовлетворяют ограничению, а тем более оптимальным. –

Смежные вопросы