全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1385 1
2020-08-23


一道国外教材上的题目,请教各位有没有更好的解法
微信截图_20200815111452.png
有商人打算通过打广告的方式增加自己产品的曝光度,他一共有9个广告媒介可以选择。媒介的具体信息如下:

目标:当地曝光度(local exposure)最大化

限制条件如下:
1、总投入不得超过20000美元;
2、国内曝光度(national exposure)不得小于4000
3、广告总条数不得超过100;
4、最多只能选择6家广告商。

我的解题思路是:
x1~x9: 整数变量, 分别表示从九个媒介出订购的广告数量
y1~y9: 0-1变量,1表示从这家媒介购买广告,0表示不从这家媒介购买广告

目标函数: min 110*x1 + 55*x2 + 80*x3 + 65*x4 + 400*x5 + 220*x6 + 35*x7 +10*x8 + 20*x9
约束条件
80*x1 + 65*x2 + 250*x3 +225*x4 + 500*x5 + 300*x6 + 55*x7 + 350*x8 + 300*x9 <= 20000
40*x1 + 20*x2 + 5*x3 +8*x4 + 70*x5 + 40*x6 + 0*x7 + 75*x8 + 65*x9 >= 4000
x1 + x2 + x3 +x4 + x5 + x6 + x7 + x8 + x9 <= 100
y1 + y2 + y3 +y4 + y5 + y6 + y7 + y8 + y9 <=6
x1 - 30*y1 <= 0
x2 - 30*y2 <= 0
...
x9 - 12y9 <= 0

因为有两组变量,所以在R里面,需要把约束条件中不存在的变量系数补全
(例如目标函数成为了:110*x1 + 55*x2 + 80*x3 + 65*x4 + 400*x5 + 220*x6 + 35*x7 +10*x8 + 20*x9 +0*y1 +0*y2 + ... + 0*y9)

虽然最后结果没问题,但是我觉得这么计算在变量数量增加(比如有100个x和100个y)或者变量种类增加(除了x,y 还有z)的情况下,会导致处理起来十分困难。

特请教各位有没有更好的办法
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-8-23 08:13:57
附上我的代码:
obj <- c(110,55,80,65,400,220,35,10,20,0,0,0,0,0,0,0,0,0)

mat <- matrix(c(80,65,250,225,500,300,55,250,300,0,0,0,0,0,0,0,0,0,
                40,20,5,8,70,40,0,75,65,0,0,0,0,0,0,0,0,0,
                1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,
                1,0,0,0,0,0,0,0,0,-30,0,0,0,0,0,0,0,0,
                0,1,0,0,0,0,0,0,0,0,-30,0,0,0,0,0,0,0,
                0,0,1,0,0,0,0,0,0,0,0,-24,0,0,0,0,0,0,
                0,0,0,1,0,0,0,0,0,0,0,0,-24,0,0,0,0,0,
                0,0,0,0,1,0,0,0,0,0,0,0,0,-10,0,0,0,0,
                0,0,0,0,0,1,0,0,0,0,0,0,0,0,-10,0,0,0,
                0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,-15,0,0,
                0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,-12,0,
                0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,-12), nrow = 13, byrow = TRUE)

dir <- c("<=",">=","<=","<=","<=","<=","<=","<=","<=","<=","<=","<=","<=")

rhs<- c(20000,4000,100,6,0,0,0,0,0,0,0,0,0)

type <- c("I","I","I","I","I","I","I","I","I",
          "B","B","B","B","B","B","B","B","B")

res <- Rglpk_solve_LP(obj, mat, dir, rhs, types = type, max = TRUE)

sol <- matrix(res$solution, nrow = 2, byrow = TRUE)

sol
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,]   30   30    0    0   10   10    0    8   12
[2,]    1    1    0    0    1    1    0    1    1


手动输入矩阵元素是真的累…………
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群