问题标签 [optimal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
14 浏览

routes - 无法理解取件和交付示例代码的输出

我已经从以下链接运行了取货和交付的示例代码 https://developers.google.com/optimization/routing/pickup_delivery#define_pickup_and_delivery_requests

我已将输入修改为 data['pickups_deliveries'] = [ [1, 6] ] data['num_vehicles'] = 4

我希望只有一辆车用于从位置 1 拣货并运送到位置 6。但是,当我运行上面的示例代码时,我看到以下输出

0号车路线:0 -> 7 -> 3 -> 4 -> 5 -> 0 路线距离:1620m

车辆1路线:0 -> 12 -> 11 -> 15 -> 13 -> 0 路线距离:1552m

车辆2路线:0 -> 1 -> 2 -> 6 -> 8 -> 0 路线距离:2008m

3号车路线:0 -> 9 -> 14 -> 16 -> 10 -> 0 路线距离:1552m

所有路线总距离:6732m

我看到车辆 2 从位置 1 取货并交付到位置 6。那么为什么车辆 2 要经过位置 2。为什么输出中有其他车辆 (0,1,3) 的路线?我希望只有一辆车可以去拣货然后交货?

请帮助我理解这个输出。

0 投票
0 回答
20 浏览

search - 在完全二叉树中搜索节点(最佳方式)

我想要一种以最佳方式在完整二叉树中找到给定节点的方法。我知道使用前序、中序或后序遍历的基本方法。我正在寻找更好的答案。

0 投票
1 回答
47 浏览

numbers - 最佳聚类数 - FUNcluster(x, i, ...) 中的错误:聚类中心多于不同的数据点

我有这些数据,我需要找到该表的最佳聚类数。这些值可以是 0、0.5 或 1

我尝试了缩放值和非缩放值:

我得到这个错误:

我该如何解决?

非常感谢您的帮助 !

0 投票
1 回答
24 浏览

python - 如何确保 GEKKO 中的 Step Function Control 以及对 MV_TYPE 的混淆

我有一个简单的最优控制问题,我必须找到一个阶跃函数f ( t ) 以最大化目标函数 ( IMODE=6)。现在f ( t ) 为 [0, 10) 中的t定义,使得f具有 10 个不同的等间距值。(即f ( t )= f 0对于 0 ≤ t < 1 等)。此外, f本身只取 0 到 10 之间的整数值(包括 0 和 10)。

首先,我认为m.time=np.linspace(0, 10, 11)[0, 1, 2, ..., 10]的时间网格中的点。然后我f=m.MV(lb=0, ub=10, integer=True)使用 APPT 解决了问题m.options.SOLVER = 1,只是忽略了f (10) 的值。

这很好解决,我能够获得一个整数解决方案。看起来,结果是 f 的线性插值,不是我想要的f的阶跃函数插值。阅读文档后,我认为 MV_TYPE 是我需要的标志。因此,我尝试通过设置将f切换为阶跃函数,m.options.MV_TYPE=0但这给了我与m.options.MV_TYPE=1. (告诉我我完全误解了 MV_TYPE 应该做什么。)所以对于我的第一个问题:什么MV_TYPE 标志在做什么?我读到的是 MV_TYPE=0 用阶跃函数对所有 MV 变量进行插值,而 MV_TYPE=1 用线性插值对所有 MV 变量进行插值。但是,使用 MV_TYPE 的两个选项进行两次单独运行会产生具有相同目标函数值的相同解决方案。

其次,有没有更好的方法来做我想做的事?(强制我的控件采用不连续阶跃函数的形式)。我在文档(示例 #17 of 18)中看到,制作阶跃函数的适当方法基本上是使时间网格足够精细以覆盖接缝。事实上,类似的东西m.time=[0, 0.999, 1, 1.999, 2, 2.999, ..., 9, 9.999]对我来说是一个合理的网格。但是,那么我的f=m.MV行将导致f有 20 个独立值(而不是我想要的 10 个)。是否有强制 MV 在时间点t=0t=0.999(以及在等处相同的值t=1t=1.999以确保我的函数是阶跃函数的值?

我不禁觉得我在这里遗漏了一些明显的东西!

0 投票
0 回答
86 浏览

matlab - 二维网格中点的分布,最小化网格中所有其他点到这些点的平均距离

让我们考虑一个二维数组 A ,其中A(i,j)=0i 和 j 最初都是。现在让我们为其添加 n 个点A(i,j)=1,即sum(sum(A))=n

问题是:

这 n 个点的最佳空间分布是什么,可以最小化 0 到 1 的平均欧几里得距离图。

使用 Matlab 将是:

所以我想找到最佳点分布(即这条线A(1:2)=1; A(2,3)=1; A(4,3)=1; A(5,5)=1),以便它average_min_distance_from_0_to_1 是所有可能排列中的最小值。

我认为这可能是几何中值问题的变体(将欧几里得距离总和最小化到一组 n 点的点),但在我的情况下,我试图找到超过 1 个点的最佳分布。

谢谢你的帮助。最好的。

0 投票
2 回答
120 浏览

dynamic-programming - 组合不相交子集的最优子结构

我希望了解此问题如何显示最佳子结构:

问题:给定任何只有正整数作为节点的二叉树,你如何找到一个不相交的子集(由它们之间没有边的节点组成)来获得最大可能的乘积。

到目前为止,我已经确定,由于节点只能是正数,因此最大的乘积要么是尽可能多的节点相乘的结果,要么是选择具有较高值的​​节点进行相乘,要么是两者之间的某种组合. 如果我要采用第一个解决方案,我可以从最低级别开始,然后从其他级别获取节点。但是,这并没有显示出最佳的子结构。任何指针将不胜感激!

0 投票
0 回答
24 浏览

c++ - 面对这个名为freetime的问题。我尝试使用向量然后设置

我面临着问题。当我使用向量时,它运行成功,但通过 10/100 并再次部分解决,我尝试将它与 set 一起使用,我得分 30/100。我想知道我应该使用哪种方法来清除这个问题。

我现在应该使用哪种方法我不想要解决方案而是逻辑。达到这个问题我可能会出错。在第一个数组中,我计算了所有爱丽丝号码和其他所有鲍勃号码。然后计算重复的数量并打印出来。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

我写的代码是

0 投票
0 回答
41 浏览

matlab - 使用 fmincon 函数的最优控制问题

xdot 值

成本函数

初值和终值

这就是我要解决的问题,我根据youtube做了一些代码来使用fmincon,但是不知道是哪一部分有问题。

首先,我定义了我需要的所有参数,

然后我将 x 点定义为一个函数。

然后,我定义了将 u 转换为适当向量的函数。

之后,我通过求解 ode 函数 (xdot) 找到 x 值来定义成本函数

结尾

然后我通过求解 ode 函数(xdot)来应用边界条件

最优 x 值

最优输入值

但结果看起来像上面的图片。首先,我通过将全局常数 N 定义为 10 来确定区间数为 10,但 x 的区间数为 45。我试图找出问题所在,但找不到问题所在。

除此之外,u_opt 与我任意定义的初始 u 相同。

有人可以就上述代码提供一些建议吗?很抱歉打扰您,非常感谢您阅读本文。

0 投票
2 回答
104 浏览

python - 使用 Python 的纸浆时如何基于决策变量创建约束程序

介绍

我想使用 Python 的纸浆创建一个“使用决策变量(如果语法)的开关”。这里,“使用决策变量切换(if语法)”是指,例如,“当x(x是大于或等于0的整数)和y(y是0、1的二进制变量)是决策变量时,如果x为大于等于1的整数,y输出1,如果x为0,y输出0。下面是一个简单的例子,公式见下附问题公式3(图)。

下面是一个简单的例子,展示了我们如何尝试创建“带有决策变量的开关(if 语法)”以及我们取得的结果。

这些示例是通过参考“运筹学导论”(东海大学出版社)中的示例创建的。

一家冰淇淋店计划生产两种冰淇淋:浓缩咖啡冰淇淋和覆盆子冰淇淋。然而,他无法生产尽可能多的产品,因为他只能生产 8000 cc 的牛奶并工作 360 分钟。每个冰淇淋都需要这么多的牛奶和时间,增加产量以实现利润最大化的计划是什么?然而,今天,一份覆盆子冰淇淋的​​覆盆子数量(配料)将到期。因此,您需要生产至少一种覆盆子冰淇淋,以免浪费。

产品名称 需要的牛奶量 工作时间 利润
咖啡冰淇淋 100cc 7 分钟 50日元
覆盆子冰淇淋 150cc 5分钟 10日元

上述问题设置可以表述如下

问题公式1

作为一个Python程序,可以表示如下

运行上述程序的结果如下。我们能够在不丢弃即将过期的覆盆子(一个覆盆子冰淇淋的​​数量)的情况下最大化我们的利润。

挑战:在引入一个约束后,该约束充当我自己创建的“带有决策变量(如果语法)的开关”(冰淇淋生产问题)

在上一章中,我们在原来的基本问题上添加了以下约束

问题公式2

为了与这个问题的主题保持一致,我们将把这个约束重写为“switch with decision variables (if syntax)”约束,如下所示

问题表述3

结果如下,我报错了。

我尝试在上面进行处理,但我无法使用决策变量创建开关(如果语法)。

是否不可能在纸浆中创建和解决这样的约束(= 使用决策变量切换(如果语法))?(对不起我没有学习,但这是一个非线性问题,不能用纸浆表达吗?)(对不起,我没有学习,但也许这是一个非线性问题,不能用纸浆表达?)或者它只是我写得不好的程序?

如果您能告诉我原因和解决方案,我将不胜感激。(如果可以的话,我想用我熟悉的pull,但是如果可以不用pull写程序,我想挑战一下,所以请告诉我。)

0 投票
1 回答
37 浏览

optimization - 如何在 Dymos 中将数量的积分指定为目标

我正在实施 Bryson-Denham 问题。目标是:

$J=\frac{1}{2}\int_{0}^{1}u^2\left(t\right)dt$

在 Dymos 的文档中,所有解释和示例都将目标值声明为 loc=initial 或 loc=final 处的标量。我找不到任何使用随时间积分作为目标函数的示例。这可能吗?我该如何实施?

仅供参考,Bryson-Denham 问题在此页面中得到了很好的解释: https ://www.gpops2.com/Examples/Bryson-Denham.html