目标规划c++实现文档格式.docx
- 文档编号:18877431
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:25
- 大小:64.87KB
目标规划c++实现文档格式.docx
《目标规划c++实现文档格式.docx》由会员分享,可在线阅读,更多相关《目标规划c++实现文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
由美国学者查纳斯(A.Charnes)和库伯(W.W.Cooper)在1961年首次提出。
2、意义
企业管理中经常碰到多目标决策的问题。
企业拟订生产计划时,不仅要考虑总产值,而且要考虑利润、产品质量和设备利用率等。
有些目标之间往往互相矛盾。
例如,企业利润可能同环境保护目标相矛盾。
如何统筹兼顾多种目标,选择合理方案,是十分复杂的问题。
应用目标规划可能较好的解决这类问题。
目标规划的应用范围很广,包括生产计划、投资计划、市场战略、人事管理、环境保护、土地利用等。
3、与线性规划差异
目标规划是以线性规划为基础而发展起来的,但在运用中,由于要求不同,有不同于线性规划之处:
①目标规划中的目标不是单一目标而是多目标,既有总目标又有分目标。
根据总目标建立部门分目标,构成目标网,形成整个目标体系。
制定目标时应注意协调各个分目标,消除分目标间的矛盾,以利总目标的实现;
各分目标必须服从总目标的实现,不能脱离总目标。
②线性规划只寻求目标函数的最优值,即最大值或最小值。
而目标规划,由于是多目标,其目标函数不是寻求最大值或最小值,而是寻求这些目标与预计成果的最小差距,差距越小,目标实现的可能性越大。
目标规划中有超出目标和未达目标两种差距。
一般以Y+代表超出目标的差距,Y-代表未达目标的差距。
Y+和Y-两者之一必为零,或两者均为零。
当目标与预计成果一致时,两者均为零,即没有差距。
人们求差距,有时求超过目标的差距,有时求未达目标的差距。
目标规划的核心问题是确定目标,然后据以建立模型,求解目标与预计成果的最小差距。
目标规划可用一般线性规划求解,也可用备解法求解,还可用单体法求解,或者先用线性规划或备解法求解后,再用单体法验证有无错误。
目标规划有时还要用对偶原理进行运算,依一般规则,将原始问题转换为对偶问题,以减少单体法运算步骤。
在企业中,目标规划的用途极为广泛,如确定利润目标,确定各种投资的收益率,确定产品品种和数量,确定对原材料、外购件、半成品、在制品等数量的控制目标等。
三、数学模型
由表上作业法可得最小运费为2950元,其10%为295元。
设x[ij]为工厂运往用户的调运量,则有:
需求约束:
x11+x12+x13+x14<
=300
x21+x22+x23+x24<
=200
x31+x32+x33+x34<
=400
供应约束:
x14+x24+x34+(d1-)-(d1+)=250
供应不少于100个单位?
:
x31+(d2-)-(d2+)=100
P2:
不少于需求的80%:
x11+x21+x31+(d3-)-(d3+)=160
x12+x22+x32+(d4-)-(d4+)=80
x13+x23+x33+(d5-)-(d5+)=360
x14+x24+x34+(d6-)-(d6+)=200
P3:
总运费不超过10%
(c11*x11+c12*x12+…-…-+c34*x34)+(d7-)-(d7+)=2950*1.1
P4:
尽量避免A2到B4:
x24+(d8-)-(d8+)=0
B1和B3保持平衡a:
ê
o
x11+x21+x31-4/9(x13+x23+x33)+(d9-)-(d9+)=0
目标函数:
minz=P1((d1-)+(d1+)+(d2-))+P2((d3-)+(d4-)+(d5-)+(d6-))+P3(d7+)+P4((d8+)+(d9-)+(d9+))
四、程序源代码
#include<
iostream>
string>
iomanip>
usingnamespacestd;
/*由®
¨
¦
表À
ª
上¦
?
作Á
¡
Â
业°
Ì
法¤
§
可¨
得Ì
,ê
最Á
小?
运?
费¤
为a2950元a,ê
其?
10%为a295元a。
设¦
x[ij]为a工¡
è
厂¡
ì
往ª
´
用®
户¡
的Ì
调Ì
量¢
则¨
°
有®
D:
需¨
求¨
®
约?
束º
供?
应®
|约?
|不?
少¦
于®
²
100个?
单Ì
£
¤
位?
不?
80%:
o总Á
¹
超?
过y10%
尽?
避À
免aA2到Ì
B4:
B1和¨
B3保À
持?
平?
衡a:
目?
标À
º
函¡
¥
数º
y:
minz=P1((d1-)+(d1+)+(d2-))+P2((d3-)+(d4-)+(d5-)+(d6-))+P3(d7+)+P4((d8+)+(d9-)+(d9+))*/
#defineN20
#defineM40
#defineK10
#defineT5
#defineCH100
voidmain()
{
stringint_into_char(intnum);
boolIs_number(charch);
voidanalyse(double*p_val1,double*p_val2,string*str_p1,string*str_p2,string*str_x1,string*str_x2,string*str_t,intx_num,intd_num,intp,double(*a)[M],double*var_val,double(*test)[M]);
voidcompute(double*p_val1,double*p_val2,string*str_p1,string*str_p2,string*str_x1,string*str_x2,string*str_t,intx_num,intd_num,intp,double(*a)[M],double(*test)[M]);
doublesum_money=0,x[N];
for(inti=0;
i<
N;
i++)x[i]=0;
doubletest[K][M];
/*charch1[N][CH],ch_fun[CH];
memset(test,'
\0'
sizeof(test));
memset(x,'
sizeof(x));
doublea[N][M],p_val1[M],p_val2[M],var_val[N];
stringstr_p1[M],str_p2[N],str_x1[M],str_x2[N],str_t[T];
intx_num,d_num,p;
*/
doubleinitial_val[N]={5,2,6,7,3,5,4,6,4,5,2,3};
doublea[N][M]={{0,0,0,1,0,0,0,1,0,0,0,1,-1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,250},
{0,0,0,0,0,0,0,0,1,0,0,0,0,-1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,100},
{1,0,0,0,1,0,0,0,1,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,160},
{0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,80},
{0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,1,0,0,0,0,360},
{0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,1,0,0,0,200},
{5,2,6,7,3,5,4,6,4,5,2,3,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,1,0,0,3245},
{0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,1,0,0},
{1,0,0.4444,0,1,0,0.4444,0,1,0,0.4444,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,1,0},};
doublep_val1[M]={0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1};
doublep_val2[N]={1,1,1,1,1,1,0,0,1};
intx_num=12,d_num=9,p=4;
stringstr_p1[M]={"
0"
"
p1"
P3"
P4"
P1"
P2"
};
stringstr_p2[N]={"
stringstr_x1[M]={"
x1"
x2"
x3"
x4"
x5"
x6"
x7"
x8"
x9"
x10"
x11"
x12"
d1+"
d2+"
d3+"
d4+"
d5+"
d6+"
d7+"
d8+"
d9+"
d1-"
d2-"
d3-"
d4-"
d5-"
d6-"
d7-"
d8-"
d9-"
stringstr_x2[N]={"
stringstr_t[T]={"
};
doublevar_val[N]={250,100,160,80,360,200,3245,0,0};
/*cout<
<
"
请?
输º
入¨
x的Ì
个?
y,ê
d的Ì
y和¨
优®
先¨
级?
p的Ì
y(p、¡
é
d<
20,x+2*d<
40):
o"
endl;
cin>
>
x_num>
d_num>
p;
for(inti=1;
=p;
i++)
{
if(i<
=9)
{
chartemp_ch=(char)(i+48);
stringtemp_str="
p"
;
str_t[i-1]=temp_str+temp_ch;
}
else
str_t[i-1]="
+int_into_char(i);
}
=x_num+2*d_num;
=x_num)
if(i<
{
chartemp_ch=(char)(i+48);
stringtemp_str="
x"
str_x1[i-1]=temp_str+temp_ch;
}
else
str_x1[i-1]="
}
elseif(i<
=x_num+d_num)
chartemp_ch=(char)(i+48-x_num);
d"
str_x1[i-1]=temp_str+temp_ch+"
+"
+int_into_char(i-x_num)+"
chartemp_ch=(char)(i+48-x_num-d_num);
-"
+int_into_char(i-x_num-d_num)+"
d_num;
i++)str_x2[i]=str_x1[i+x_num+d_num];
cout<
各¡
方¤
程¨
¬
oeg.p1(d1-)+p2(d2-)+p2(d2+)+3p3(d3-)+5p3(d4-)"
5(x1)+4(x2)+(d1-)-(d1+)=20"
y方¤
(请?
按ã
ä
照?
格?
式º
!
):
ch_fun;
inttemp_index=0;
stringstr_p="
str_d="
doubles_num=0;
M;
i++)
p_val1[i]=0;
str_p1[i]="
strlen(ch_fun);
if(Is_number(ch_fun[i]))
inttemp_seat=0,flag_seat=0;
do
if(ch_fun[i]=='
.'
)
{i++;
flag_seat++;
}
else
{
s_num=s_num*10+(int)(ch_fun[i])-48;
i++;
if(flag_seat!
=0)temp_seat++;
}
}while(Is_number(ch_fun[i]));
for(inti=0;
temp_seat;
i++)s_num=s_num/10;
flag_seat=0;
if(ch_fun[i]=='
('
||ch_fun[i]=='
)'
)i++;
p'
)
str_p=ch_fun[i];
i++;
while(Is_number(ch_fun[i]))
str_p=str_p+ch_fun[i];
i++;
d'
str_d="
str_d=str_d+ch_fun[i];
str_d=str_d+ch_fun[i];
for(intj=x_num;
j<
x_num+2*d_num;
j++)
if(str_d==str_x1[j])
if(s_num==0)p_val1[j]=1;
elsep_val1[j]=s_num;
str_p1[j]=str_p;
s_num=0;
str_p="
str_d="
break;
for(intj=0;
if(j==i+x_num)a[i][j]=-1;
elseif(j==i+x_num+d_num)a[i][j]=1;
elsea[i][j]=0;
组Á
cin>
ch1[i];
intflag=0;
doublea_num=0;
stringstr_x="
strlen(ch1[i]);
if(ch1[i][j]=='
+'
)continue;
-'
flag++;
j++;
if(Is_number(ch1[i][j]))
inttemp_seat=0,flag_seat=0;
do
if(ch1[i][j]=='
){j++;
else
{
if(flag==0)a_num=a_num*10+(int)(ch1[i][j])-48;
elsea_num=a_num*10-(int)(ch1[i][j])+48;
j++;
flag=0;
if(flag_seat!
}
}while(Is_number(ch1[i][j]));
for(inti=0;
i++)a_num=a_num/10;
flag_seat=0;
||ch1[i][j]=='
)j++;
x'
str_x="
while(Is_number(ch1[i][j]))
str_x=str_x+ch1[i][j];
j++;
){j=j+3;
='
if(ch1[i][j]=='
inttemp_seat=0,flag_seat=0;
while(Is_number(ch1[i][j]))
if(ch1[i][j]=='
else
{
a[i][x_num+2*d_num]=a[i][x_num+2*d_num]*10-(int)(ch1[i][j])+48;
j++;
if(flag_seat!
}
for(inti=0;
i++)a[i][x_num+2*d_num]=a[i][x_num+2*d_num]/10;
flag_seat=0;
continue;
else
a[i][x_num+2*d_num]=a[i][x_num+2*d_num]*10+(int)(ch1[i][j])-48;
for(intk=0;
k<
k++)
if(str_x==str_x1[k])
if(a_num==0&
&
flag==0)a[i][k]=1;
elseif(flag!
=0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 目标 规划 c+ 实现