目标规划c++实现文档格式.docx

上传人:b****6 文档编号:18877431 上传时间:2023-01-01 格式:DOCX 页数:25 大小:64.87KB
下载 相关 举报
目标规划c++实现文档格式.docx_第1页
第1页 / 共25页
目标规划c++实现文档格式.docx_第2页
第2页 / 共25页
目标规划c++实现文档格式.docx_第3页
第3页 / 共25页
目标规划c++实现文档格式.docx_第4页
第4页 / 共25页
目标规划c++实现文档格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

目标规划c++实现文档格式.docx

《目标规划c++实现文档格式.docx》由会员分享,可在线阅读,更多相关《目标规划c++实现文档格式.docx(25页珍藏版)》请在冰豆网上搜索。

目标规划c++实现文档格式.docx

由美国学者查纳斯(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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1