Задача 5
Решая задачу 5 не будем применять каких-либо алгоритмов, а решим ее аналитическим путем.
Для начала исключим из задачи сено, то есть исходная задача принимает вид:
Задача 5.1
Заменим сено на силос (концентраты оставим постоянной величиной). Из задачи 2 норма выдачи концентратов
=6,75 из этого следует,Решение:
; при этом . Следовательно, если мы заменим сено силосом, то рацион будет состоять из силоса- 39,25 и концентратов – 6,75. Оптимальная стоимость рациона составит 112,25 копеек.Задача 5.2
Заменим сено на концентраты (силос оставим постоянной величиной).Из задачи 2 норма выдачи силоса
=9,25 из этого следует,Решение:
; при этом . Следовательно, если мы заменим сено концентраты, то рацион будет состоять из силоса- 9,25 и концентратов – 40. Оптимальная стоимость рациона составит 218,5 копеек.Так как
, то замена сена на силос более выгодно, чем замена на концентраты.ВЫВОДЫ
В результате выполненной работы было выявлено, что основой повышения продуктивности животных является полноценное кормление. Недостаток какого- либо вида питательных веществ в рационе отрицательно сказывается на развитии животных и ведет к снижению их продуктивности. Кроме этого, неполноценное кормление вызывает перерасход кормов. Поэтому кормовой рацион должен быть полностью сбалансирован по всем питательным веществам, необходимым для каждого вида.
Для составления экономико-математической модели по выбору оптимальных кормовых рационов необходимы данные:
наличие кормов по видам;
содержание питательных веществ в единице корма;
требуемое количество питательных веществ в рационе;
максимально и минимально возможные нормы скармливание отдельных видов кормов;
себестоимость кормов и цены добавок, которые могут быть приобретены на стороне.
Вся эта информация готовится на основе фактических данных, получаемых в хозяйстве и справочной литературе. Используются также данные лабораторных анализов.
Данная курсовая работа содержит ознакомительный теоретический материал и подробно расписанную задачу по составления оптимального рациона кормления скота. Задача содержит в себе пять подзадач для того, чтобы можно было проследить, как меняется рацион и оптимальная стоимость с теми или иными изменениями (ограниченность ресурсов продуктов на один рацион, замена одного продукта на другой, увеличение ресурсов питания и другое).
К курсовой работе прилагается программа, поставленная на решении данной задачи.
ЛИТЕРАТУРА:
1 Ананенков В.П. Математические методы планирования сельского хозяйства – Киев: Вища школа,1980.-430с
2 Деордица Ю.С., Нефедов Ю.М. Исследование операций в планировании и управлении: Учебное пособие.- Киев: Вища школа,1991-270с
3 Крушевский А.В., Швецов К.И. Математическое программирование и моделирование в экономике – Киев: Вища школа,1979.-456с
4 Крушевский А.В. Справочник по экономико-математическим моделям и методам. - Киев: Техника,1982.-208с
5 Терехов Л.Л., Шарапов А.Д. и др. Математические методы и модели в планировании: учебное пособие для студентов вузов.- Киев: Вища школа. Головное изд-во, 1981.- 272с
ПРИЛОЖЕНИЕ А
обязательное
(текст программы, схема программы, описание программы, инструкция пользователю)
ТЕКСТ ПРОГРАММЫ
Блок1 ------------------------------------------------------
program simpl;
uses crt;
const m1=30;
n1=40;
m2=30;
type arm2m2=array[1..m2,1..m2] of real;
arm2n1=array[1..m2,1..n1] of real;
arm2=array[1..m2] of real;
arn1=array[1..n1] of real;
arm1=array[1..m1] of integer;
var a:arm2n1;
b,x:arm2;
c:arn1;
w:arm1;
m,n:integer;
t:text;
l,k,p,q,ll:integer;
f:real;
u:arm2m2;
Блок1 -------------------------------------------------------
Блок2 -------------------------------------------------------
procedure vvod(var c:arn1; var b:arm2; var a:arm2n1; var m,n:integer);
var i,j:integer;
s:string;
Блок2 -------------------------------------------------------
Блок3 -------------------------------------------------------
begin
write('Введите имя файла с исходными данными '); readln(s);
assign(t,s); reset(t);
readln(t,m,n);
for i:=1 to m do
for j:=1 to n do a[i,j]:=0;
for j:=1 to n do read(t,c[j]); readln(t);
for i:=1 to m do
begin
for j:=1 to n do read(t,a[i,j]); readln(t);
end;
for i:=1 to m do read(t,b[i]); readln(t);
close(t);
end;
Блок3 -------------------------------------------------------
Блок4 -------------------------------------------------------
procedure wp(var w:arm1; var x:arm2; var u:arm2m2);
var i,j:integer;
r,s:real;
Блок4 -------------------------------------------------------
Блок5 -------------------------------------------------------
begin
p:=m+2; q:=m+2; k:=m+1;
for j:=1 to n do
begin a[k,j]:=-c[j]; s:=0;
for i:=1 to m do s:=s-a[i,j];
a[p,j]:=s; w[j]:=0;
end;
s:=0;
for i:=1 to m do
begin
w[i]:=n+i; r:=b[i]; x[i]:=r; s:=s-r;
end;
x[k]:=0; x[p]:=s;
for i:=1 to p do
begin
for j:=1 to p do u[i,j]:=0; u[i,i]:=1;
end;
end;
Блок5 -------------------------------------------------------
Блок6 -------------------------------------------------------
procedure ms(var k,l:integer; var x:arm2);
var j,i:integer;
ex,stop:boolean;
s,d:real;
y:arm2;
Блок6 -------------------------------------------------------
Блок7 -------------------------------------------------------
begin
stop:=false;
repeat
if (x[p] >= 0) then q:=m+1;
d:=0;
for j:=1 to n do
begin
s:=0;
for i:=1 to p do s:=s+u[q,i]*a[i,j];
if d > s then begin d:=s; k:=j end;
end;
if d >= 0 then
begin
stop:=true; f:=x[q];
end
else
begin
for i:=1 to q do
begin
s:=0; for j:=1 to p do s:=s+u[i,j]*a[j,k]; y[i]:=s;
end;
ex:=true; d:=1e30;
for i:=1 to m do
if y[i] > 0.000001 then
begin
s:=x[i]/y[i]; if ex or (s < d) then
begin
d:=s; l:=i; end;
ex:=false;
end;
if ex then stop:=true
else
begin
w[l]:=k; s:=1/y[l];
for i:=1 to q do
for j:=1 to q do
if i <> l then u[i,j]:=u[i,j]-u[l,j]*y[i]*s;
for j:=1 to q do u[l,j]:=u[l,j]*s;
for i:=1 to q do
if i <> l then x[i]:=x[i]-d*y[i];
x[l]:=d;
for i:=1 to q do
begin
write(t,x[i]:7:2,y[i]:7:2,w[i]:2);
for j:=1 to q do write(t,u[i,j]:7:2);
writeln(t);
end;
writeln(t,'---------------------------------------------');
end;
end
until stop;
end;
Блок7 -------------------------------------------------------
Блок8 -------------------------------------------------------
procedure vivod;
var i:integer;
f:real;
Блок8 -------------------------------------------------------
Блок9 -------------------------------------------------------
begin
writeln(t,Количество продуктов:');
f:=0;
for i:=1 to m do
if c[w[i]] <> 0 then
begin
writeln(t,w[i]:2,x[i]:10:2);
f:=f+c[w[i]]*x[i];
end;
writeln(t,'Значение стоимости',f:16:2);
end;
Блок9 -------------------------------------------------------
Блок10 -------------------------------------------------------
begin
vvod(c,b,a,m,n);
assign(t,'w_'); rewrite(t);
wp(w,x,u); ms(k,l,x);
vivod;
close(t);
end.
Блок10 ---------------------------------------------------------
ОПИСАНИЕ ПРОГРАММЫ
Блок1 – самый первый блок прграммы, в котором описываются константы, переменные, типы переменных, массивы которые в дальнейшем будут использоваться в программе.