Автор работы: Пользователь скрыл имя, 08 Июня 2015 в 16:20, курсовая работа
Для успешного развития животноводства важное значение имеет организация кормовой базы, поскольку от этого во многом зависят здоровье и продуктивность животных, себестоимость производимой продукции. Определение состава оптимальных кормовых смесей, рационов – одна из первых экономических задач, к решению которой были применены методы нелинейного программирования. Первая попытка составления набора продуктов, который был бы самым дешевым и содержал бы необходимое количество питательных веществ была сделана Дж. Стиглером в 1945 г. В 50-е годы задача оптимизации кормовых рационов получает распространение [6].
Введение 2
2 РАСЧЕТ РЕЦЕПТОВ КОРМЛЕНИЯ СВИНЕЙ СРЕДСТВАМИ MS EXCEL 21
2.1 Обоснование работы 21
2.2 Выполнение работы 22
2.2.1 Создание первоначальной базы кормов и норм кормления животных, среды расчета рациона 22
2.2.2 Автоматизация процесса выбора группы животных, для которых будет составляться рецепт 24
2.2.3 Автоматизация процесса определения структуры рациона 25
2.2.4 Отладка оптимизации рецепта 29
2.2.5 Анализ рассчитываемых рецептов 31
Заключение 33
Список использованных источников 34
Листинг 4.
Public fForm
Sub feed()
'проверяем выбранные корма
For iman1 = 3 To 2000
If Sheets("Корма").Cells(iman1, 2) = 1 Then
Else
nul = nul + 1
End If
Next iman1
' запускаем цикл если выбраны корма
If nul = 1998 Then
MsgBox "Выберите корм"
nul = 0
Else
Cells.EntireRow.Hidden = False
fForm = 0
cCount = 3
While Sheets("Расчет").Cells(cCount, 1) <> 0
cCount = cCount + 1
Wend
If cCount = 4 Then
Else
cCount = cCount - 2
Sheets("Расчет").Rows("3:" & cCount).Delete Shift:=xlUp
End If
'загружаем название кормов в которых будут расчеты
For iman = 3 To 2000
If Sheets("Корма").Cells(iman, 2) = 1 Then
Sheets("Расчет").Rows("3:3").
Sheets("Расчет").Rows("3:3").
Sheets("Расчет").Rows("3:3").
b = Sheets("Корма").Cells(iman, 3)
Sheets("Расчет").Cells(3, 1) = b
Else
End If
Next iman
' загружаем теже корма с данными
For i = 3 To 2000
If Sheets("Корма").Cells(i, 2) = 1 Then
Sheets("Расчет").Rows("3:3").
Sheets("Расчет").Rows("3:3").
Sheets("Расчет").Rows("3:3").
For k = 3 To 60
a = Sheets("Корма").Cells(i, k)
If k = 3 Then
Sheets("Расчет").Cells(3, k - 2) = a
Else
Sheets("Расчет").Cells(3, k + 1) = a
End If
Next k
fForm = fForm + 1
Else
End If
Next i
sPer = fForm
'заносим формулу расчета
For form = 5 To 60
For form1 = fForm + 3 To fForm + fForm + 3
Sheets("Расчет").Cells(form1, form).FormulaR1C1 = "=R[-" & fForm & "]C*RC2"
Sheets("Расчет").Cells(form1, form).NumberFormat = "0.00"
Next form1
Next form
' сумма
If fForm = 0 Then
For kkk = 2 To 60
Sheets("Расчет").Cells(3, kkk) = 0
Next kkk
Else
l = fForm + fForm + 3
For kk = 2 To 60
Sheets("Расчет").Cells(l, kk).FormulaR1C1 = "=SUM(R[-" & fForm & "]C:R[-1]C)"
Sheets("Расчет").Cells(l, kk).NumberFormat = "0.00"
Next kk
Sheets("Расчет").Cells(l, 3) = ""
Sheets("Расчет").Cells(l, 4) = ""
End If
'переносим питательность в колонку факт
Call pitatel
'присваиваем 0 колнке с минимальным значением
For nol = fForm + 3 To fForm + fForm + 2
Sheets("Расчет").Cells(nol, 3) = 0
Sheets("Расчет").Cells(nol, 3).NumberFormat = "0.00"
Sheets("Расчет").Cells(nol, 4).NumberFormat = "0.00"
Sheets("Расчет").Cells(nol, 2).NumberFormat = "0.00"
Next nol
'скрываем строки кормов с данными
Sheets("Расчет").Rows("3:" & fForm + 2).EntireRow.Hidden = True
Sheets("Расчет").Select
End If
End Sub
Public Sub pitatel()
Dim i
Dim s
Dim g
For i = fForm + fForm + 6 To 225
s = i - (fForm + fForm + 3)
g = i - (fForm + fForm + 4)
Sheets("Расчет").Cells(i, 3).FormulaR1C1 = "=R[-" & s & "]C[" & g & "]"
Next i
End Sub
Макрос «feed» является основным в программе. Перенос значений из листа с кормами осуществляется в область ячеек, которые этим же макросом скрываются на листе «Расчет» так как их не нужно видеть в процессе расчета. Список кормов дублируется для ввода расчетных формул. Эти формулы также заносятся данным макросом, формула представляет собой произведение содержания кормового компонента в корме на количество этого компонента в смеси. В строку «Итого…» заносится сумма содержания питательного фактора во всех кормовых компонентов. Эта сумма также отражается в колонке «Факт» для расчета отклонения от нормы.
Так же макрос форматирует значения ячеек до двух знаков после запятой, что облегчает восприятие информации. В столбец «min» заносятся значения 0, так как при начале оптимизации нижний предел корма как правило выставляют минимальным.
На листе «Корма» вставляем элемент управления «Кнопка» , и назначаем ему макрос «feed».
После того как перенос данных был осуществлен, пользователь должен определить максимально и минимально возможное количество введения каждого кормового компонента.
2.2.4 Отладка оптимизации рецепта
Программа MS EXCEL включает надстройку «Поиск решений», которая позволяет решать оптимизационные задачи с высокой скоростью и точностью. Вначале нужно убедиться, что надстройка подключена, в случае если она отключена ее необходимо подключить.
Для использования данного пакета вначале необходимо определить целевую ячейку. В нашем случае целевой ячейкой будет модуль суммы отклонений содержания питательных веществ в рационе от нормы их введения. Целью оптимизации является снижение данной величины, т.к. чем меньше отклонение от нормы, тем более сбалансирован рацион. Поэтому в окне надстройки устанавливаем переключатель в положение «минимальному значению» (рис. 20).
Оптимизация будет
Также необходимо наложить ограничения на изменение ячеек. Сумма всех компонентов в колонке «Количество корма» должна составлять единицу (т.е. 100%). Поэтому добавляем ограничение, в котором ячейка «Итого» равна единице. Также существуют ограничения на ввод отдельных компонентов в состав рациона. Они указываются в колонках «max» и «min». Далее добавляется два ограничения в которых значения столбца «Количество корма» должны быть больше либо равны значений колонки «min» и меньше либо равны значений колонки «max».
Рисунок 20. Надстройка «Поиск решений»
После того как все параметры оптимизации заданы, нажимаем кнопку выполнить. Если решение, удовлетворяющее заданные требования найдено, то сохраняем его. Если решение не найдено, то необходимо изменить, либо компоненты рецепта, либо пределы ввода отдельных кормовых средств.
После оптимизации рецепт будет иметь вид, который представлен на рисунке 21.
Рисунок 21. Оптимизированный рецепт комбикорма
Для того чтобы облегчить восприятие сбалансированности рецепта, отклонения от нормы в случае недостатка питательного элемента выделяются красным цветом, а в случае избытка – зеленым. Для этого применим к ячейкам данного столбца условное форматирование, указав при этом два условия:
- значение больше нуля;
- значение меньше нуля.
Отображение ячейки при выполнении условия в первом случае будет зеленого цвета, во втором – красного.
2.2.5 Анализ рассчитываемых рецептов
Чтобы продемонстрировать насколько гибкая данная программа по сравнению с аналогичными приложениями продемонстрируем пример анализа содержания питательного элемента в сырье. Данная функция фигурирует в программе «Корм Оптима» как одно из преимуществ над продуктами других производителей.
Для начала отобразим скрытую область ячеек с данными о питательности кормовых компонентов. Затем выполним команду вставить диаграмму. Определим тип «Круговая». Далее укажем два диапазона данных в режиме столбцы. Первым диапазоном будет столбец с названиями кормовых компонентов, вторым – столбец с питательностью данных компонентов по необходимому элементу (в нашем примере Лизин). Далее ставим флажок в подписях данных напротив значений и получаем готовый результат (рис. 22).
Рисунок 22. Содержание питательного элемента в сырье
Таким же образом можно сделать график сбалансированности рецепта, который наглядно демонстрирует насколько хорошо данный рацион соответствует требованиям питательности рациона. Для этого выполняем команду вставить диаграмму, выбираем тип «Гистограмма», далее указываем диапазон данных из двух столбцов: столбец с названиями питательных элементов и столбец «Откл.», далее добавляем таблицу данных и нажимаем готово (рис. 23).
Рисунок 23. Сбалансированность рецепта
В результате мы получаем график, на котором отклонения от нуля отражают недостаток либо избыток питательного элемента в рационе. Составление данного графика можно автоматизировать путем записывания макроса. Выполним данное действие и полученный макрос назовем graph.
Данные примеры показали, что при грамотном использовании среды MS EXCEL, можно добиться высокой производительности программы, повторить и даже превзойти возможности коммерческих аналогов.
Заключение
Список использованных источников
Информация о работе Применение программ оптимизации рецептов кормления свиней