当前位置: 首页 > 知识库问答 >
问题:

在R中使用线性(或非线性?)约束优化值

章兴发
2023-03-14

在不同的限制条件下,我试图挑选最好的梦幻足球队。我的目标是挑选能够最大化其预测积分总和的球员。

制约因素是:

1) 团队必须包括:

-1个QB

-2苏格兰皇家银行

-2个WRs

-1 TE

2)玩家的风险不得超过6

3) 球员的费用总额不得超过300英镑。

如何做到这一点?R中优化这些约束的最佳包/函数是什么?在给定这些约束的情况下,最大化投影点的函数调用会是什么样子?仅供参考,我将搜索100-300名玩家。

提前感谢!下面是一个小示例数据集:

name <- c("Aaron Rodgers","Tom Brady","Arian Foster","Ray Rice","LeSean McCoy","Calvin Johnson","Larry Fitzgerald","Wes Welker","Rob Gronkowski","Jimmy Graham")

pos <- c("QB","QB","RB","RB","RB","WR","WR","WR","TE","TE")

pts <- c(167, 136, 195, 174, 144, 135, 89, 81, 114, 111) 

risk <- c(2.9, 3.4, 0.7, 1.1, 3.5, 5.0, 6.7, 4.7, 3.7, 8.8) 

cost <- c(60, 47, 63, 62, 40, 60, 50, 35, 40, 40) 

mydata <- data.frame(name, pos, pts, risk, cost) 

共有1个答案

洪高扬
2023-03-14

你的约束和目标是线性的,但你的变量是二进制的:是否应该挑选每个玩家。所以你的问题比线性规划(LP)更一般,它是一个混合整数规划(MIP)。在CRAN的优化任务视图中,查找他们的MIP部分。

CPLEX是一个您可能无法访问的商业求解器,但GLPK是免费的。如果我是你,我可能会使用高级接口Rglpk。

这将需要你把你的问题在矩阵形式,我建议你看留档和例子。

编辑:以下是一个实现:

# We are going to solve:
# maximize f'x subject to A*x <dir> b
# where:
#   x is the variable to solve for: a vector of 0 or 1:
#     1 when the player is selected, 0 otherwise,
#   f is your objective vector,
#   A is a matrix, b a vector, and <dir> a vector of "<=", "==", or ">=",
#   defining your linear constraints.

# number of variables
num.players <- length(name)
# objective:
f <- pts
# the variable are booleans
var.types <- rep("B", num.players)
# the constraints
A <- rbind(as.numeric(pos == "QB"), # num QB
           as.numeric(pos == "RB"), # num RB
           as.numeric(pos == "WR"), # num WR
           as.numeric(pos == "TE"), # num TE
           diag(risk),              # player's risk
           cost)                    # total cost

dir <- c("==",
         "==",
         "==",
         "==",
         rep("<=", num.players),
         "<=")

b <- c(1,
       2,
       2,
       1,
       rep(6, num.players),
       300)

library(Rglpk)
sol <- Rglpk_solve_LP(obj = f, mat = A, dir = dir, rhs = b,
                      types = var.types, max = TRUE)
sol
# $optimum
# [1] 836                      ### <- the optimal total points

# $solution
#  [1] 1 0 1 0 1 1 0 1 1 0     ### <- a `1` for the selected players

# $status
# [1] 0                        ### <- an optimal solution has been found

# your dream team
name[sol$solution == 1]
# [1] "Aaron Rodgers"  "Arian Foster"   "LeSean McCoy"
# [4] "Calvin Johnson" "Wes Welker"     "Rob Gronkowski
 类似资料:
  • 函数“def gekko_obj(x)”适用于任何x值。 但是,当m作为Gekko目标函数调用时,它会失败。Obj(gekko_obj(x))。 文件“/anaconda3/lib/python3.6/site packages/spyder/utils/site/sitecustomize.py”,第710行,在runfile execfile(文件名,命名空间)中 文件“/anaconda3/

  • 从本质上说,我想最小化覆盖消费的成本。这些规则或多或少有以下几点: 每一个客户(我们有几百万个客户)消费不同的物品,这是不同的每一个客户。我们有许多产品,每一个包括一个或多个项目,在给定的成本。产品和成本对所有客户来说都是共同的。此外,还有一些附加的限制因素将哪些产品可以为每个客户组合在一起,但这些限制因素对所有客户来说都是相同的。我正在计划使用Spark解决这个问题,我不熟悉它的算法在这个问题上

  • 问题内容: 考虑以下(凸)优化问题: 其中优化(矢量)变量和和,是适当维度的矩阵和向量,分别。 下面的代码使用Scipy中的方法轻松找到解决方案: 注意约束函数是一个方便的“数组输出”函数。 现在,代替约束的数组输出函数,原则上可以使用一组等效的“标量输出”约束函数(实际上,scipy.optimize文档仅讨论此类约束函数作为的输入)。 下面是对应的约束集,随后的输出(同样,和初始值与上述列出)

  • 主要内容:语法,示例当对真实世界数据建模进行回归分析时,我们观察到模型的方程很少是给出线性图的线性方程。 大多数情况下,现实世界数据模型的方程式涉及更高程度的数学函数,如或函数的指数。 在这种情况下,模型的曲线给出了曲线而不是线性。线性和非线性回归的目标是调整模型参数的值以找到最接近您的数据的线或曲线。当找到这些值时,我们才能够准确估计响应变量。 在最小二乘回归中,我们建立了一个回归模型,不同点与回归曲线的垂直距离的

  • 我试图找到如何在R中最大化具有等式和不等式约束的二次函数: 最大化x’*H*x 根据以下条件: 问题的简化版本可以是 最大化x^2 y^2,根据x y=1和x,y 由于这是一个最大化问题,我无法使用

  • 问题内容: 在MySQL中创建非NULL约束以使fieldA和fieldB不能都为NULL的最佳方法是什么。我不在乎任何一个本身是否为NULL,只要另一个字段具有非NULL值即可。而且,如果它们都具有非NULL值,那就更好了。 问题答案: MySQL 5.5引入了SIGNAL,因此我们不再需要Bill Karwin的答案中的额外列。Bill指出您还需要一个更新触发器,因此我也将其包括在内。