LINGO解线性规划问题
发布时间:2024-08-30
发布时间:2024-08-30
用lingo解线性规划的例子
电视台节目编排问题
某电视台现有六个频道,需要编排从晚间18:00至24:00每半个小时的节目类型,共有新闻、综艺、影视剧、服务、教育以及其他等六类电视节目类型可供选择。每种类型的节目在各个频道的各个时段播放的收视率预测值rpsj已知。在以下约束下,求电视台如何编排各个频道各个时段的节目,使得总体收视率预测值最大。
节目唯一性约束:每个频道每半个小时只能播放一种类型的节目;
节目连续性约束:影视剧节目播放时间至少为一个小时;
同时段同类型节目数量约束:在晚间20:00-22:00间,综艺类和影视剧类节目不超过3个频道同时播放;任何时段内,新闻类节目不超过2个频道播放;
频道专业化约束:频道1不播放综艺类节目,频道2不播放新闻类节目且播放综艺类节目的时段不少于6个,频道3播放影视剧节目的时段不少于10个,频道5播放综艺和服务类节目的时段不少于6个,频道6播放服务和教育类节目不少于8个;
固定节目播放约束:频道4的18:30-19:30必须播放新闻类节目。
使用LINGO软件,编制程序如下:
model:
sets:
pindao/1..6/;
shiduan/1..12/;
jiemu/1..6/;
allowed(pindao,shiduan,jiemu):AA,X;
endsets
data:
!从excel表中引入常量AA;
AA=@OLE('D:\六频道数据.xls');
!将编排结果输出到EXCEL表中;
@OLE('D:\六频道数据.xls')=X;
enddata
!目标函数最大;
max=@sum(pindao (i):
@sum(shiduan (j):
@sum(jiemu(k):
AA(i,j,k)*X(i,j,k))));
!同频道同时段只能播一类型的节目约束;
@for(pindao(i):
@for(shiduan (j):
@sum(jiemu (k):
X(i,j,k))=1));
!影视需要连续两个时段播放;
@for(pindao(i):
@for(shiduan (j)|j#le#11#and#j#ge#2:
用lingo解线性规划的例子
x(i,j,3)+x(i,j+1,3)>=2*(x(i,j,3)-x(i,j-1,3))));
!同时段同类型节目数量约束;
!时段5678影视剧播放不超过3个;
@for(shiduan (j)|j#le#8#and#j#ge#5:
@sum(pindao (i):
X(i,j,3))<=3);
!时段5678综艺不超过3个;
@for(shiduan (j)|j#le#8#and#j#ge#5:
@sum(pindao (i):
X(i,j,2))<=3);
!任何时段新闻节目不超过2个频道播放;
@for(shiduan (j):
@sum(pindao (i):
X(i,j,1))<=2);
!频道专业化约束;
!频道1不播放综艺节目;
@for(shiduan (j):
x(1,j,2)=0);
!频道2不播放新闻节目节目;
@for(shiduan (j):
x(2,j,1)=0);
!频道2的综艺节目不少于6个;
@sum(shiduan (j):
X(2,j,2))>=6;
!频道3的影视剧不少于10个;
@sum(shiduan (j):
X(3,j,3))>=10;
!频道5的综艺和服务节目不少于6个;
@sum(shiduan (j):
X(5,j,2)+X(5,j,4))>=6;
!频道6的服务和教育节目数量不少于8个;
@sum(shiduan (j):
X(6,j,4)+X(6,j,5))>=8;
!固定节目约束;
!频道4的时段2、3播放新闻节目;
X(4,2,1)=1;
X(4,3,1)=1;
!0-1约束;
@for (allowed(i,j,k): @bin(X(i,j,k)));
end
用lingo解线性规划的例子
推销员旅行问题
有一个推销员,从城市1出发,要遍访城市2,3,…,n各一次,最后返回城市1。已知从城市i到j的旅费为cij,问他应按怎样的次序访问这些城市,使得总旅费最少?
假设现有5个城市,ABCDE,各个城市间的旅费如下表所示,求推销员应该按照怎样的次序
使用LINGO软件,编制程序如下:
model:
sets:
city / 1.. 5/:u;
link(city, city): cc, x;
endsets
n = @size(city);
data:
cc = @OLE('D:\旅行者');
@OLE('D:\旅行者')=x;
enddata
!目标函数;
min = @sum(link: cc * x);
@FOR( city(K):
!进入城市K;
@sum( city(I)| I #ne# K: x( I, K)) = 1;
!离开城市K;
@sum( city(J)| J #ne# K: x( K, J)) = 1;
);
!保证不出现子圈;
@for(city(I)|I #gt# 1:
@for( city(J)| J#gt#1 #and# I #ne# J:
u(I)-u(J)+n*x(I,J)<=n-1);
);
!限制u的范围以加速模型的求解,保证所加限制并不排除掉TSP问题的最优解;
@for(city(I) | I #gt# 1: u(I)<=n-2 );
!定义X为0\1变量;
@for( link: @bin(x));
end
下一篇:人体工程学与老年家具