R 中的非线性离散优化

2023-12-08

我有一个简单的(实际上是经济学标准)非线性约束discreteR 中要解决的最大化问题,但遇到了麻烦。我找到了解决方案parts问题的一部分(非线性最大化;离散最大化),但不是所有问题的并集。

问题就在这里。消费者想要购买三种产品(凤梨、香蕉、饼干),知道价格并且预算为 20 欧元。他喜欢多样化(即,如果可能的话,他希望拥有所有三种产品),并且他的满意度随着消费量的增加而下降(他更喜欢他的第一块饼干,而不是他的第 100 块)。

他希望最大化的函数是

function to maximize

当然,由于每个人都有一个价格,而且他的预算有限,他在以下约束下最大化了这个功能:

enter image description here

我想做的是找到满足约束条件的最优购买清单(N 条香蕉,M 条香蕉,K 条饼干)。

如果问题是线性的,我会简单地使用 linprog::solveLP()。但目标函数是非线性的。 如果问题具有连续性,那么将有一个简单的分析解决方案。

这个问题是离散和非线性的,我不知道如何进行。

这里有一些可以玩的玩具数据。

df <- data.frame(rbind(c("ananas",2.17),c("banana",0.75),c("cookie",1.34)))
names(df) <- c("product","price")

我想要一个优化例程,为我提供 (N,M,K) 的最佳购买清单。

有什么提示吗?


1)没有包裹这可以通过暴力来完成。使用df从问题作为输入确保price是数字(它是df问题的)并计算最大的数字mx对于每个变量。然后创建网格g变量计数并计算total每个及相关的价格objective giving gg。现在排序gg按照目标的降序排列,并采取满足约束条件的解决方案。head将显示前几个解决方案。

price <- as.numeric(as.character(df$price))
mx <- ceiling(20/price)
g <- expand.grid(ana = 0:mx[1], ban = 0:mx[2], cook = 0:mx[3]) 
gg <- transform(g, total = as.matrix(g) %*% price, objective = sqrt(ana * ban * cook))
best <- subset(gg[order(-gg$objective), ], total <= 20)

giving:

> head(best) # 1st row is best soln, 2nd row is next best, etc.
     ana ban cook total objective
1643   3   9    5 19.96  11.61895
1929   3   7    6 19.80  11.22497
1346   3  10    4 19.37  10.95445
1611   4   6    5 19.88  10.95445
1632   3   8    5 19.21  10.95445
1961   2  10    6 19.88  10.95445

2) dplyr这也可以使用 dplyr 包很好地表达。使用g and price从上面:

library(dplyr)
g %>% 
  mutate(total = c(as.matrix(g) %*% price), objective = sqrt(ana * ban * cook)) %>%
  filter(total <= 20) %>%
  arrange(desc(objective)) %>%
  top_n(6)

giving:

Selecting by objective
  ana ban cook total objective
1   3   9    5 19.96  11.61895
2   3   7    6 19.80  11.22497
3   3  10    4 19.37  10.95445
4   4   6    5 19.88  10.95445
5   3   8    5 19.21  10.95445
6   2  10    6 19.88  10.95445
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 中的非线性离散优化 的相关文章

  • 如何使用 r 中的 caret 包在最佳调整超参数的 10 倍交叉验证中获得每次折叠的预测?

    我试图使用 R 中的插入符包使用 10 倍交叉验证和 3 次重复来运行 SVM 模型 我想使用最佳调整的超参数获得每次折叠的预测结果 我正在使用以下代码 Load packages library mlbench library caret
  • R从列表中提取数据框,列名中没有前缀

    我在列表中放置了一个数据框 然后 当尝试将其提取回来时 我得到了该数据帧的所有以列表键为前缀的列名称 有没有办法完全按照最初传递的方式提取数据帧 cols lt c column1 Column2 Column3 df1 lt data f
  • 将summary()写入as.data.frame以在ggplot / R中使用

    请查找 af 数据样本t below 我正在使用以下方法进行竞争风险分析etmCIF来自etm package 产生以下结果 这很好 但需要更好的图形 曾经有一个ggtrans etm函数将数据导入ggplot 然而 这个功能显然被删除了
  • 用于清除工作空间和转储存储的 R 全局函数

    我希望创建一个全局函数来清除我的工作区并转储我的内存 我将我的函数称为 cleaner 并希望它执行以下代码 remove list ls gc 我尝试在全局环境中创建该函数 但是当我运行它时 控制台仅打印该函数的文本 在我要获取的函数文件
  • 在 mac (iMac OSX ) 终端中远程运行脚本(r 脚本)到其他计算机

    我有一个小示例脚本 script p r 如下所示 打算在终端中运行 usr bin Rscript sink output capture txt mn lt mean 1 10 and so on much longer list of
  • R-了解 akima::interp 结果中的 NA 值

    我有以下数据框 ref dat k Intensity Slope 1 0 021467214 33 16 2 0 012444759 33 8 3 0 006079156 33 4 4 0 003792025 33 2 5 0 02276
  • 使用 dplyr:group_by 将数据帧分成多个子集?

    有没有办法根据 group by 组使用 dplyr 将一个数据帧拆分为数据帧的子集 mtcars gt group by cyl gear gt codes 非常感谢 好吧 并不是你真的想要 但你可以这样做tidyr 即nearly一样的
  • 如何在 R 中为传单中的数值变量设置不对称颜色渐变

    我想让传单调色板以零为中心 红白绿发散 我已经尝试过中所说的这个帖子 https stackoverflow com questions 29262824 r center color palette on 0 当我尝试手动创建颜色时 我得
  • 当每个记录都是一个段落并且某些记录有 4 个字段而其他记录有 6 个字段时,如何将文本文件读入 R

    如何读取文本文件 其中每条记录都是一个段落 每个换行符表示单独的字段 复杂的是 有些记录有 4 行 有些记录有 6 行 当字段数量的差异为 1 时 DWin 解决了我的问题 但当字段数量差异为 2 时 一切都崩溃了 你可以有一个在这里看看他
  • Gekko - 最佳调度的不可行解决方案,与 gurobi 的比较

    我对 Gurobi 有点熟悉 但转向 Gekko 因为后者似乎有一些优势 不过 我遇到了一个问题 我将用我想象的苹果园来说明这一问题 5周的收获期 horizon T 5 就在我们身上 我的 非常微薄的 产出将是 3 0 7 0 9 0 5
  • 将 VLMC 拟合到很长的序列

    我正在尝试将 VLMC 拟合到最长序列为 296 个状态的数据集 我这样做如下所示 Load libraries library PST library RCurl library TraMineR Load and transform d
  • 将 sf voronoi 多边形裁剪到边界框时出错

    我正在尝试将 voronoi polygons 使用 sf package 创建 剪辑 到边界框 但它引发了我无法定义的错误 我对 R 的空间世界不太有经验 感谢所有帮助 样本数据 stations lt structure list ST
  • 逻辑回归/二项式的 glmnet 误差

    当尝试将 glmnet 与 family binomial 配合以进行逻辑回归拟合时 出现此错误 gt data lt read csv DAFMM HE16 matrix csv header F gt x lt as data fram
  • 将数据从 R 导出到 Excel

    我试图将从 R 获得的一些结果导出到 Excel 中 但未成功 我尝试过以下代码 write table ALBERTA1 D ALBERTA1 txt sep t write csv ALBERTA1 ALBERTA1 csv your
  • 带 R 的多彩标题

    我想添加颜色某些词在我的图表标题中 我已经能够在这里找到一些先例 http blog revolutionanalytics com 2009 01 multicolor text in r html 具体来说 我希望用撇号括起来的文本 在
  • 如何计算嵌套函数中的粘合表达式?

    我正在尝试嵌套一个函数 该函数将两个字符串粘合在一起 该函数使用组合字符串来命名数据帧的列 然而 问题似乎是粘合表达式没有足够早地评估为字符串 我可以 并且应该 强制在将表达式作为参数传递给另一个函数之前对其进行求值吗 library ti
  • ggplot散点图中的图例问题

    我想使用 ggplot 创建显示方法比较数据的散点图 绘图应包含原始数据 理想线和带误差的拟合线 图例应显示理想线和拟合线的线型 线宽 线颜色 我可以获得大部分我想要的东西 但是图例存在以下问题 图例显示每种线型有 2 条线 为什么 如何解
  • 16 位以上整数的计算

    我有两个大整数 两者都超过 16 位 确切地说是 20 位 而且我知道由于双精度浮点运算 我在使用这些数字进行计算甚至将它们存储在变量中 独立于编程语言 时受到限制 不过 我想也许gmp图书馆应该处理它们 但不幸的是它没有 可以计算更大的整
  • R 中的 Websocket

    我设法在 R 中建立到 Mtgox websocket 的连接 规格如下 url https socketio mtgox com mtgox Currency USD https socketio mtgox com mtgox Curr
  • GGPLOT2:如何在 ggplot() 脚本中绘制特定选择

    这是一个名为的大型数据集的峰值P 其中有 10 个优惠 CS 有不同的商店 SHP 具有多个数值 数据集列出了按周排序的它们 WK 2 tm 52 它创建一个大文件 仅前 6 行出现峰值 WK MND CS SHP RevCY RevLY

随机推荐

  • Powershell:在特定的当前同级元素后添加新的 XML 元素

    我有一个 xml 列表 我希望在其中添加一个新的子元素
  • 如何使用 SQLite 将值转入列?

    我做了一张桌子叫tbl用这个代码 CREATE TABLE tbl Year int Album varchar 255 Artist varchar 255 Label varchar 255 Genre varchar 255 id i
  • 从对象数组内的数组返回唯一的数组值

    我找不到类似的问题 我有点卡住了 我有以下 JSON 数组 Name element1 Attributes 1 2 Name element2 Attributes 1 3 Name element3 Attributes 我正在尝试创建
  • 重新构造复数因子向量,千位后用逗号分隔

    我想重新格式化一个因子向量 以便它包含的数字有千位分隔符 该向量包含整数和实数 对于值或顺序没有任何特定规则 Data 特别是 我正在使用向量vec类似于下面生成的 content lt c 0 100 0 100 0 100 0 100
  • PowerShell 包装器将管道输入定向到 Python 脚本

    我正在尝试编写一个小工具 让我可以将命令输出通过管道传输到剪贴板 我已读完multiple answers在 Stack Overflow 上 但它们对我不起作用 因为它们不包含管道 或者因为它们没有使用函数 或者它们只是抛出错误 或者也许
  • 在 bash 脚本中批量 mv 或重命名 - 附加日期作为后缀

    经过大量搜索和反复试验 我无法进行批量处理mv or rename在文件目录上 我想做的是移动或重命名目录中的所有文件 以便mv d or renamed 文件有 date Y d m 添加到原来的后缀 所有原始文件都有唯一的前缀 但要么
  • 如何在 Holoviews 中设置活动工具

    有时我的情节会被绘制pan工具活跃 有时他们用pan and wheel zoom积极的 我愿意强行wheel zoom在渲染时处于活动状态 有没有办法做到这一点 自从 Holoviews 1 11 0 发布以来 原来的答案已经过时了 Ho
  • CIFilter后图像旋转

    我正在将 CIFilter 应用于肖像图像 由于某种原因 它顺时针旋转了 90 度 我怎样才能解决这个问题 我的代码如下 var imgOrientation oImage imageOrientation var imgScale oIm
  • 以编程方式创建属性集和属性

    我正在使用以下链接中列出的代码 http www magentocommerce com wiki 5 modules and development catalog programmatically adding attributes a
  • 在 Google Spreadsheet API 中查找最后写入的行

    有什么方法可以找到您在 Java 的 google 电子表格中编写的最后一行吗 我尝试通过将一个变量保存在另一个文件中来做到这一点 并在每次进行另一次写入时更新该变量 还有其他办法吗 在 Google Spreadsheet API 中查找
  • 如何更改 Haskell 矩阵中的某个值?

    我对 Haskell 很陌生 还没有完全理解它是如何工作的 在下面的方法中 我想更改矩阵中的某个值或在 Haskell 中实现的列表列表 setEntry Int gt Int gt Int gt Int gt Int setEntry x
  • Jetpack Compose - 语音识别

    你知道如何申请吗语音识别 语音识别器 在 Jetpack Compose 中 就像是this 但在 Compose 中 我按照以下步骤操作this video 在清单中添加了这些权限
  • spring jdbctemplate 和 Hibernate 之间的区别[重复]

    这个问题在这里已经有答案了 我的问题很简单 Spring jdbcTemplate 和 Hibernate 之间的主要区别是什么 我们在使用其中之一时应考虑的主要原因是什么 Thanks Hibernate 是一个非常庞大的解决方案 具有数
  • .bat 重命名文件名删除前 x 个字符和最后 x 个字符

    我需要重命名某个文件夹中的文件 就像所解释的那样 它需要通过删除我设置的第一个 x 字符数和最后一个 x 字符数来重命名一个文件夹中的文件名 有人可以告诉我该怎么做吗 干得好 echo off setlocal enabledelayede
  • 如何计算多个数据帧之间的重叠行?

    我有一个如下所示的多个数据框 df1 pd DataFrame Col1 aaa ddd ggg Col2 bbb eee hhh Col3 ccc fff iii df2 pd DataFrame Col1 aaa zzz qqq Col
  • 将自定义函数与 Timber 一起使用

    我一直在尝试使用 Timber 入门主题中的示例并按照木材文档 但我一生都无法让它发挥作用 我的functions php是这样的 class StarterSite extends TimberSite function my funct
  • 如何使用 PHP PDO 解析 MySQL 数据库中的对象数据?

    我在尝试从数据库返回对象数据时遇到了问题 我跟着本教程构建一个数据库包装器 并一直在尝试扩展它的功能以满足我的需求 我的问题是 当我使用 DB 类 get 方法返回数据时 它还返回 PDO 对象本身的实例 我想知道如何解析这些数据 以便只返
  • sdk 管理器中没有软件包或平台

    在 sdk 管理器中 我看不到任何要安装的软件包或任何平台 我尝试以管理员身份运行sdk并禁用防病毒程序和防火墙 而且我已经多次尝试卸载并重新安装它 但没有成功 我的 installer r18 windows exe 版本为 18 ADT
  • Spark:如何从 Spark 数据帧行解析和转换 json 字符串

    如何在 pyspark 中解析和转换来自 Spark 数据帧行的 json 字符串 我正在寻找如何解析的帮助 json 字符串到 json 结构output 1 将 json 字符串转换为 a b 和 id 列output 2 背景 我通过
  • R 中的非线性离散优化

    我有一个简单的 实际上是经济学标准 非线性约束discreteR 中要解决的最大化问题 但遇到了麻烦 我找到了解决方案parts问题的一部分 非线性最大化 离散最大化 但不是所有问题的并集 问题就在这里 消费者想要购买三种产品 凤梨 香蕉