Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Реализация в Excel





Создаем таблицу с переменными a, b, константой V и формулами:

h = V /(ab); S = 2(аb + ah + bh).

Таким образом, имеем задачу безусловной оптимизации с двумя переменными a, b и целевой функцией S. Задаемся начальным приближением a, b. Поочередно варьируем с постоянным малым шагом значениями первой и второй переменными, на каждом шаге находим минимальное значение S. Для быстрого поиска минимального значения целевой функции по строкам в столбце «Е3:Е15» помещаем в ячейку «Е16» функцию «=МИН(E3:E15)» (рисунок 3), а в столбце «F3:F15» – функцию от «ЕСЛИ(E3=E$16;"<=";"")» до =ЕСЛИ(E15=E$16;"<=";"").

 

Рисунок 3 – Экранная форма задачи в Excel

Значение переменной, соответствующей минимуму S, устанавливаем во всех ячейках данного столбца и переходим к варьированию другой переменной. Затем возвращаемся к первой переменной и так до тех пор, пока не перестанут меняться оптимальные значения переменных a, b и соответственно целевая функция S. Увеличение точности вычислений достигается уменьшением шага варьирования переменных.

В случае многих переменных, решение подобным образом является крайне трудоемкой задачей. В этом случае можно создать следующий макрос, написанный в редакторе Visual Basic:

 

Sub Optim()

Dim shag() As Double, amin() As Double, amax() As Double

Dim k As Integer, funk As Double, stroka As Integer, stroka0 As Integer

Dim stolbec As Integer, z As String, S As String, p As Double

Dim strokak As Integer, N As Integer, f0 As Double, f00 As Double

Dim pmin As Double, pmax As Double, i As Integer

ReDim shag(20), amin(20), amax(20)

N = 2 'Число переменных

stroka0 = 3 'Начальная строка

strokak = 15 'Конечная строка

shag(1) = 0.001 'Шаг первой переменной

shag(2) = 0.001 'Шаг второй переменной

amin(1) = 0.001 'Минимальное значение первой переменной

amin(2) = 0.001 'Минимальное значение второй переменной

amax(1) = 10 'Максимальное значение первой переменной

amax(2) = 10 'Максимальное значение второй переменной

f0 = Worksheets(1).Range("E8").Value 'Средняя ячейка столбца целевой функции

Do

f00 = f0

For stolbec = 1 To N

z = Chr(stolbec + 64)

k = (strokak - stroka0) / 2

S = z & Mid(Str(k), 2)

p = Worksheets(1).Range(S).Value

pmin = p - shag(stolbec) * k

If pmin < amin(stolbec) Then pmin = amin(stolbec)

pmax = pmin + shag(stolbec) * (strokak - stroka0)

If pmax > amax(stolbec) Then pmax = amax(stolbec)

p = pmax - shag(stolbec) * (strokak - stroka0)

For stroka = stroka0 To strokak

S = z & Mid(Str(stroka), 2)

Worksheets(1).Range(S).Value = p

p = p + shag(stolbec)

Next stroka

f0 = 1E+15

For stroka = stroka0 To strokak

S = "E" & Mid(Str(stroka), 2) 'Столбец целевой функции

funk = Worksheets(1).Range(S).Value

If funk < f0 Then f0 = funk: i = stroka Else Exit For

Next stroka

For stroka = stroka0 To strokak

S = z & Mid(Str(stroka), 2)

Worksheets(1).Range(S).Value = Worksheets(1).Range(z & Mid(Str(i), 2)).Value

Next stroka

Next stolbec

Loop Until f00 = f0

End Sub

 

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

 

Date: 2016-01-20; view: 423; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию