"Оптимальный объем:" & _
v, vbInformation, "Расчет прибыли"
End Sub
В ячейках F12:J16 (рис.11.1) с помощью функции пользователя прибыль, которая будет описана ниже, вычисляются финансовые исходы при всех возможных вариантах событий покупки журналов и их реализации.
Option Base 1
Function Прибыль(покуп As Variant) As Variant
Dim NRows, i, j, Цпрод, Цпок, Цсдач, As Integer, Res() As Integer
NRows = покуп.Rows. Count
Цпрод = Range(“продажа”).Value
Цпок = Range(“покупка”).Value
Цсдач = Range(“возврат”).Value
ReDim Res(NRows, NRows)
For i = 1 to NRows
For j = 1 to Nros
If i <= j then Res(i,j) = покуп(i) * (Цпрод – Цпок)
If i > j then Res(i,j) = покуп(j) * (Цпрод – Цпок) – (покуп(i) – покуп(j)) * (Цпок – Цсдач)
Next j
Next i
Прибыль = Res
End Function
В ячейках L13:L17 с помощью формулы
{ = МУМНОЖ(F12:J16; ТРАНСП(F9:J9))},
находим ожидаемую прибыль, соответствующую различным вариантам покупки журналов. В ячейке I17 (максимальная прибыль) с помощью формулы:
= НАИБОЛЬШИЙ(L13:L17;1),
вычисляем максимальную прибыль. Ее так же можно найти, воспользовавшись функцией МАКС, находящей максимальный элемент из списка
= МАКС((L13:L17)
В ячейке I18 по формуле
= (ПОИСКПОЗ(НАИБОЛЬШИЙ(L13:L17;1); L13:L17;0) – 1)*5,
вычисляем соответствующий оптимальный объем покупок газет. Затем процедура Calc выводит эти оптимальные значения в окне сообщений.
Функция НАИБОЛЬШИЙ(LARGE) возвращает k-е наибольшее значение из множества данных. Эта функция используется, чтобы выбрать значение по его относительному местоположению.
Синтаксис:
НАИБОЛЬШИЙ(массив; k)
Аргументы:
массив Массив или диапазон, для которых определяется k-е наибольшее значение.
k Позиция (начиная с наибольшей) в массиве или диапазоне.
Задача 12
Бумажная фабрика выпускает свою продукцию в виде бумажных рулонов стандартной длины равной 20 футам. По специальным заказам потребителей поставляются рулоны и других размеров. Типичны заказы на рулоны нестандартных размеров приведены в таблице на рис 12. Необходимо удовлетворить заказы, минимизируя отходы.
Для построения математической модели надо перебрать все возможные варианты раскроя рулона стандартной длины на рулоны требуемой длины.
Данную задачу решает следующая программа:
Option Explicit
Sub Раскрой()
Dim R, i1, i2, i3, i4, s, t As Integer
Dim l, a1, a2, a3, a4, a5, m As Integer
l = 20
a1 = 5: a2 = 7
a3 = 8: a4 = 10
R = 3
m = Application.Min(a1, a2, a3, a4)
t = Application.Floor(l / m, 1)
For i1 = 0 To t
For i2 = 0 To t
For i3 = 0 To t
For i4 = 0 To t
s = 20 - a1 * i1 - a2 * i2 - a3 * i3 - a4 * i4
If s >= 0 And s < m Then
Cells(R, 1).Value = R - 2
Cells(R, 2).Value = i1
Cells(R, 3).Value = i2
Cells(R, 4).Value = i3
Cells(R, 5).Value = i4
Cells(R, 6).Value = s
R = R + 1
End If
Next i4
Next i3
Next i2
Next i1
End Sub
Floor возвращает наибольшее целое число не превышающее данные.
Рис 12
Пусть - количество стандартных рулонов, разрезанных по варианту j, где . Ограничения, налагаемые на переменные , связаны с требованием обеспечить изготовление заказанного количества нестандартных рулонов. Функция цели учитывает суммарные отходы, получаемые при выполнение заказа. Т.е., минимизировать:
при ограничениях :
целое при и ,
,
,
.
Рис 12.1
Отведём диапазон ячеек I3:I12 под переменные. Введём в диапазон ячеек J3:M3 левые части ограничений, определённые следующими формулами :
=СУММПРОИЗВ($I$3:$I$12;B3:B12)
=СУММПРОИЗВ($I$3:$I$12;С3:С12)
=СУММПРОИЗВ($I$3:$I$12;D3:D12)
=СУММПРОИЗВ($I$3:$I$12;E3:E12)
В ячейку N3 введём функцию цели:
=СУММПРОИЗВ($I$3:$I$12;F3:F12)+B2*(СУММПРОИЗВ($I$3:$I$12;B3:B12)-J2)+C2*(СУММПРОИЗВ($I$3:$I$12;C3:C12)-2)+D2*(СУММПРОИЗВ($I$3:$I$12;D3:D12)-L2)+E2*(СУММПРОИЗВ($I$3:$I$12;E3:E12)-M2),
где в ячейки В2:Е2 введены длины, а в ячейки J2M2 – количество заказанных рулонов.
Выберем команду «Сервис» - «Поиск решения» и заполним открывшееся диалоговое окно «Поиск решения», как показано на рис 12.2
Рис 12.2
Ответ: Оптимальным является использование первого варианта раскроя для 100 стандартных рулонов, второго для – для 50, пятого для 150 и десятого для 15 стандартных рулонов рис 12.3
Рис 12.3