基于组合优化的3D家居布局生成看千禧七大数学难题之NP问题

2023-10-27

a8dfecdfa2cfac038d04739555039b2f.gif

本文探讨了运筹学和组合优化方法在3D家居布局生成中的应用,并调研了AI生成3D场景布局的最新方法。文中结合了家居家装业务的实际应用场景,从算法建模和计算复杂度的角度上阐述了室内设计的布局问题中存在的难点,以及如何用简化和近似的思想来建模3D布局生成问题,最终展望了生成式AI技术对室内设计行业的推动作用。

e690ef2f21c7c3c8d7c2a76cf7b72700.png

前言

  运筹学与组合优化问题

室内设计,包括家具物品的选择、布局和材料,是一项需要专业设计师的具有挑战性的任务。在产生出色效果的同时,由艺术家完成的专业室内设计是一个耗时的过程。随着用于建筑可视化和游戏行业的大型虚拟 3D 环境的日益普及,虚拟场景的手动室内设计在时间和资源方面变得异常昂贵。因此,需要自动化室内设计方法来加快这一过程。

运筹学是寻找最优策略的方法体系。在室内设计中,家具布局和各种装饰品的陈列摆放包含了大量的人类先验和美学认知,除了考量各种规则和空间物理限定,还有赖于设计师发挥自身的经验或使用者本人根据自身审美进行优化设计。例如如何安置大件家具,如何控制空间的紧凑性,桌椅搭配等等。从技术角度,这些设计过程都是一种决策过程,而决策过程总是可以被刻画成一个优化问题,进而可以使用运筹学的方法来解决。运筹学、数学规划(Math Programming)问题的数学表达式,由自变量(Variables)、目标函数(Objective Function)和约束条件(Constraints)组成,所有优化问题本质上都可以化简为由它们组成的数学表达式,然后求解满足约束条件下使得目标函数最大/小的变量的值。

组合优化问题(Combinatorial Optimization Problem,COP)是一类在离散状态下求极值的最优化问题。组合优化也叫离散优化, 是运筹优化的重要组成部分, 其中 "组合" 是排列组合的组合。从字面上理解这个名词, 组合优化是要从呈组合数复杂度爆炸式增长的解空间中, 寻找最优的解向量, 即制定最优决策方案。作为人工智能的重要分支, 组合优化与时下大热的统计学习存在着千丝万缕的联系,AI模型训练与求解组合优化问题的方法往往有异曲同工之妙。因为AI的训练同样是一个优化过程,基于深度网络建模一个记忆空间巨大的拟合器并通过最小化目标函数来优化模型参数。组合优化同样是寻找特定目标函数下的最优解,通过数值法对求解变量进行迭代调整,只不过组合优化不使用深度网络而使用一些具有强可解释性的目标约束方程来建模。组合优化问题的数学形式在各种学科中常常出现,通常可以描述为在限制条件G(x)下最小化目标函数F(x),其中自变量x在可行域D内。

试着将3D家具场景布局问题定义一下,现在有一个空房间R,包含了墙面参数、地面范围、门窗位置等等,我想将一堆的家具模型F,自动地放置在房间内,并形成合理的布局,那么我需要给出每个家具模型在房间中摆放的位置、角度等结果。每个家具的位置对应着一个三维的求解空间R,而且每个家具F之间是具有关联的,基本的要求不能产生碰撞穿模等等,更高的要求是要符合人类的室内设计认知。因此布局问题的求解空间是巨大的,约束方程也难以完备地定义。

  千禧七大数学难题——NP问题

试着从遍历的方式计算一下上述定义的布局问题的时间复杂度,仅考虑计算每个家具的3D位置结果,则把空房间的三维空间离散化,首先这个解空间c1e6220a526a27e5aa2730afe0fbbfc2.png是巨大的(比如离散后以0.1cm为单位,假设房间为10*10*4m,则离散后的解空间6354f4d0c78c9b3c9408791ca8c0b3f4.png包含了4*1012点),其次随着家具数量的增加,整个布局的解空间W呈现指数增长,对于N个物体就是45c1b0f9b7a70af4fd8482b3ded7c4f3.png。还有一个问题是在布局时需要考虑家具俩俩之间的关系进行约束建立,比如桌椅不能碰撞,床头柜要放在床旁边,电视要摆在桌子上面等等,这又是一个阶乘的复杂度。因此从遍历的角度看3D布局问题的求解,其复杂度是爆炸的。使用组合优化的方法来建模这一布局问题在计算复杂度和计算效率上充满了考验。

根据计算复杂性理论,组合优化问题可以有 P 问题、NP 问题、NP-complete(NPC)问题,NP-hard问题四类,它们的定义分别为:

  1. P 问题:可以用确定性算法在多项式时间(也就是leecode常说的复杂度是多少89c2f059b5d4e559b3c86a2b5f21178c.png)内解决的问题。

  2. NP 问题:可以在多项式时间内验证是否正确的问题。

  3. NPC 问题:它是一个 NP 问题,同时所有的 NP 问题都能在多项式时间内约化到它。(注意,如果这种问题存在多项式时间的算法,那么所有 NP 问题都是多项式时间可解的,即 P=NP)。

  4. NP-hard 问题:所有 NP 都能在多项式内约化到它,但它不一定是一个 NP 问题。

少数组合优化问题是 P 问题,如最小生成树,最短路。大多数组合优化问题没有精确的多项式时间算法,许多组合优化问题是 NP-hard 的,如旅行售货商问题 TSP、最小顶点覆盖问题 MVC 等。可以看出P类问题也是NP类问题,而两者是否完全相等便是P/NP问题,即是否所有NP类问题都是P类问题,拥有多项式时间的求解算法。P/NP不单是抽象的数学难题,若得以解决,它在运筹学和密码学等应用领域也将有重大影响,此外还被认为有特别的哲学意义。

541908b0ab0cad50a018a1a1aff8ec89.png

P/NP问题是著名的千禧七大数学难题之一。千禧年七大数学难题(英语:Millennium Prize Problems)是七条由美国的克雷数学研究所(Clay Mathematics Institute,CMI)于2000年5月24日公布的数学难题,解题总奖金700万美元。根据克雷数学研究所制定的规则,这系列挑战不限时间,题解必须发表在知名的国际期刊,并经过各方验证,只要通过两年验证期和专家小组审核,每解破一题可获奖金100万美元。这些难题旨在呼应1900年德国数学家大卫·希尔伯特在巴黎提出的23个历史性数学难题,经过一百年,约17条难题至少已局部解答。剩下的七个难题为:1.P/NP问题,2.霍奇猜想, 3.黎曼猜想, 4.杨-米尔斯存在性与质量间隙, 5.纳维-斯托克斯存在性与光滑性, 6.贝赫和斯维讷通-戴尔猜想, 7.庞加莱猜想。而千禧年大奖难题的破解,极有可能为密码学、航天、通讯等领域带来突破进展。迄今为止,在七条问题中,庞加莱猜想是唯一已解决的,2003年,俄罗斯数学家格里戈里·佩雷尔曼证明了它的正确性。而其它六道难题仍有待研究者探索。

由此可见,组合优化问题的快速可解性一直是数学家关注的难题。NP问题在实际中通常是非常困难的,甚至是不可能解决的。例如旅行商问题和最小割问题都是 NP 问题。这些问题可能可以通过近似算法或启发式算法来解决,但这些算法并不能保证找到全局最优解。NP优化问题即是NP问题的变种,即在NP问题的基础上加上了优化目标,求最优解。由于NP问题很难解决,因此NP优化问题也是一个很难解决的问题。通常使用启发式算法或近似算法来解决这类问题,但是这些算法也无法保证找到全局最优解。3D家居布局生成正可以被近似为这样一个NP优化问题。

7ec6a1a555e1d4ba0a355232fc5f7ac2.png

问题定义

现在我们定义一个更加简单的家具布局问题,假设已有设计师为我们设计了初始的家具布局,我们更换其中的一些家具物体来达到泛化效果。此时由于更换前后的物体大小等参数不一致,我们需要设置更好后物体的位置来保证场景的合理性,此时我们只需要微调替换物体的位置,求解空间和约束建模就变得简化了许多,我们可以基于组合优化的方法来实现这个目标。下面对家具布局微调问题建立一个基于组合优化的解决方案。

9adf58b230a4a2e4d2f788a45243d3e8.png

57051a9430564268d48be8f52a750e4e.png

组合建模优化

微调3D场景布局可以建模为一个组合优化问题,其目标函数是在优化过程中不断调整目标物体的位置,将一些关于布局的约束模型的值最小化:

自变量:d38a5d7c4be79157a28bdc72b383f02a.png表示物体i 的空间位置

目标函数:1f697799913f158db0ce538d3cd37d2c.pngd3b2e393fec3a65ce924a1d075e7776a.png为各种约束模型,优化目标即希望各个约束模型的全局损失最小。

约束模型(举几个例子):

碰撞约束(希望家具和家具之间不产生物理穿模):

f312b0c658321d458fd7af81138cb4bf.png

p表示被碰撞检测的两个物体的位置,r表示物体的最大实际半径

贴墙约束(希望靠着墙的家具保持靠墙):

ace8ba854e47d1a14c9eefb5ce3c9135.png

9541881bf21d063d7b2300e7e91a52df.png表示替换后物体到墙面的距离,fc58534f68ef2a213f2c8061c88f06ed.png表示替换之前物体到墙面的距离墙面范围约束(希望靠着墙的家具在墙面平行轴不要移动到墙外):

c916213b8e6f47bca7f4f8a48114bf4b.png

0d5d1344395f3fb527691471b2fc054f.png表示墙面的起点,8d91c953d40452458335cd593e58ec9d.png表示墙面的终点,length表示墙面长度。

空间坐标约束(希望家具的位置总保证在房间内):

5b6b0cfd9810f7c8f28ec4d4a871300c.png

其他约束:

可参阅 [1] Fast and Scalable Position-Based Layout Synthesis, TVCG 2018

解空间:离散化三维空间坐标

当建模组合优化问题时使用到一些不等式约束时,也可以选择将不等式约束转换为二次优化问题,使用拉格朗日法求解,如SVM建模。

501c9f2dd51a3b16510ded9feee64dcb.jpeg

优化步骤

在建模好各种约束模型后,通常和训练神经网络一样,组合优化通过迭代多个轮次求解当目标函数379c8f90e6b1001e2e6942a91e2cb84d.png满足极小值的自变量6a86627a6d95b916d34581437cfbd625.png。而另一点和训练神经网络一样的是,模型迭代多轮后可能陷入局部最优,除了设定固定轮次迭代,我们同样使用一些早停止技术。

1、获取各个物体初始化位置position

2、进入更新循环:

3、第一步更新约束模型的刚度权重,cff5f9bbae6a8ccff8568fcba5960c56.png, 初始权重为0

4、计算当前的能量函数,得到当前约束模型的损失value

5、判断更新条件,如果该约束未达到停止条件,则进行参数传播

6、对每个约束进行传播,计算位置移动的矫正量

7、一个类型的约束,如果一个模型在多个约束里,取一次矫正量的平均

8、所有类型的约束,可能多个约束都对一个模型产生影响,对各个模型进行矫正量进行加权。

9、根据传播得到的加权位置矫正量,更新每个模型粒子的位置参数

10、判断停止条件

11、全局损失E小于e-2量级

12、连续两轮更新的全局损失E小于e-4量级

13、结果存放

14、best存放迭代过程中最小的全局损失loss

15、best存放全局损失最小时的所有模型粒子的位置参数

c853592df8812169a38b05d29dd9c171.jpeg

布局生成

通过基于组合优化的家具布局微调策略,我们可以得到一个符合我们设计的约束模型预期的一个布局结果,也就是将原有的家具位置更新为微调后的位置。下面举例表现一下微调策略的能力。下图中桌子与餐椅发生了穿模,椅子的脚已经看不见了,经过微调后,椅子在前面的桌子和后面的植物中间拉扯出了一个极限的放置空间,避免了穿模。微调过程所示图是整个房间以及家具bbox俯视图,动图演示了家具调整自己位置的目标方向。

微调前
微调后
微调过程

0d6489eb2c5bb7e85f288a019c40dfb9.png

7d5fbcafe6ee34687c590311bd0abebd.png

17183eb1d8e39cee22c43fa99eaf644e.gif

e0ffba390b2d560c2035fd5d56b81a5f.jpeg

展望

室内设计是一项极具物理认识、设计理论和行业经验的复杂任务,一个室内设计师通常需要经过多年的学习和实践才能成长为一个出色的室内设计师。而当前AI虽然能够一定程度地协助设计师完成一些智能任务,但是还没有出现一个足够强大的AI可以一键式自动地完成从样板间设计到布局生成,且保证合理性、美观性、多样性、与prompt保持一致性的结果。或许在近期内,随着AIGC和3D技术的发展,AI设计师也将降临室内设计领域,从生成单个3D模型走向合成丰富复杂的3D场景。最后带来两篇3D家居布局相关文献分享。

  LEGO-Net

当前家具布局也出现了一些基于深度学习的A生成布局的方法,下面介绍一下LEGO-Net。LEGO-Net希望解决的问题正是将混乱的家具布局微调成一个整齐的合理的符合人类认知的家具布局。LEGO-Net结合Transformer-based的网络和diffusion中的denosing的思想,设计了一个denoising Transformer架构来推理家具的布局位置。巧妙的一点是微调目标希望将混乱的家具布局调整成一个符合预期的合理布局,这与diffusion model的思想有异曲同工之妙,因此LEGO-Net就将家具布局生产建模成了一个从混乱到整齐的一个denosing过程。具体的,LEGO-Net输入各个家具的位置、角度、类别等参数,编码成特征向量,同时输入布局的俯视图作为prompt,经过点云学习网络提出一个prompt特征,使用Transformer-based的网络作为基座来预测denoising过程中的家具参数变化。

2d8bb98583bb720ef994823f0b73df87.png

最终,LEGO-Net可以实现一个基本的布局生成效果,同时还可以学习一些强规则性的布局规则,如桌椅摆放。

e1e3a153e8d9f3e2858ba3ccb7f9c559.png

下面是LEGO-Net自动调整布局的动态图。

  CC3D

另一项工作CC3D提出了一个基于单视角图片输入和2D俯视布局的生成式AI模型来生成3D的家具场景。CC3D输入2D布局的语义分割图和噪声向量,使用StyleGAN2提取特征并reshape到3D特征volume,通过三线性插值后经过MLP编码到一个神经辐射场,然后根据一个相机视角渲染出一个2D图片并超分到高分辨率图片,然后在discriminator中与真实图片对比。另一方面,为了保证一致性,CC3D从3D特征volume中采样得到一个布局语义分割图的特征表示添加到discriminator与真实布局语义图进行对比。

a6b3b1277ec24b268468e7743090acb4.png

下面是CC3D生成的3D家居场景。

5db848ead7bb30048b83e3f5393d4762.jpeg

参考文献

[1] Weiss T, Litteneker A, Duncan N, et al. Fast and scalable position-based layout synthesis[J]. IEEE Transactions on Visualization and Computer Graphics, 2018, 25(12): 3231-3243.

[2] Wei Q A, Ding S, Park J J, et al. Lego-net: Learning regular rearrangements of objects in rooms[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2023: 19037-19047.

[3] Bahmani S, Park J J, Paschalidou D, et al. Cc3d: Layout-conditioned generation of compositional 3d scenes[J]. arXiv preprint arXiv:2303.12074, 2023

9f56cd234f15c0f8c96d75355f5bdd97.jpeg

团队介绍

我们是淘天集团-场景智能技术团队,一支专注于通过AI和3D技术驱动商业创新的技术团队, 依托大淘宝丰富的业务形态和海量的用户、数据, 致力于为消费者提供创新的场景化导购体验, 为商家提供高效的场景化内容创作工具, 为淘宝打造围绕家的场景的第一消费入口。我们不断探索并实践新的技术, 通过持续的技术创新和突破,创新用户导购体验, 提升商家内容生产力, 让用户享受更好的消费体验, 让商家更高效、低成本地经营。

¤ 拓展阅读 ¤

3DXR技术 | 终端技术 | 音视频技术

服务端技术 | 技术质量 | 数据算法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于组合优化的3D家居布局生成看千禧七大数学难题之NP问题 的相关文章

  • 准确测量一组基准点之间的相对距离(增强现实应用)

    假设我有一组 5 个标记 我正在尝试使用增强现实框架找到每个标记之间的相对距离 例如AR工具包 http www hitl washington edu artoolkit 在我的相机中 前 20 帧仅向我显示前 2 个标记 以便我可以计算
  • 如何插值旋转?

    我有两个描述旋转的向量 起始旋转 A 和目标旋转 B 我如何最好地通过因子 F 对 A 进行插值以接近 B 当需要插值多个维度时 即产生不需要的旋转 在向量上使用简单的 lerp 不起作用 也许从旋转向量构建四元数并使用Slerp http
  • 使用四元数进行 OpenGL 旋转[重复]

    这个问题在这里已经有答案了 因此 我正在编写一个程序 其中对象以 spacesim 方式移动 以便学习如何在 3D 空间中平滑地移动对象 在对欧拉角进行了一番研究之后 它们似乎并不真正适合任意方向上的自由形式 3D 运动 因此我决定继续使用
  • 给定一个 4x4 齐次矩阵,我如何获得 3D 世界坐标?

    所以我有一个正在旋转然后再次平移和旋转的对象 我将这些翻译的矩阵存储为对象成员 现在 当我进行对象拾取时 我需要知道该对象的 3D 世界坐标 目前我已经能够像这样获得物体的位置 coords 0 finalMatrix 12 坐标 1 最终
  • WP7 XNA 显示 3D FBX 模型

    我只是初学者 很抱歉我的愚蠢问题 我的模型看起来像这样 http img265 imageshack us img265 8291 clipboard01ap jpg http img265 imageshack us img265 829
  • 给定表面法线,找到 3D 平面的旋转

    所以我有一个由 2 个向量描述的 3D 平面 P 位于平面上的点N 平面的表面法线 我有一个非常大的扁平方形多边形 我想渲染它来代表这个平面 我可以轻松地将多边形平移到给定点 但随后我需要找到适当的旋转来应用以使表面法线实际上成为表面法线
  • Blender 与 Unity [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将球体上的 3d 点转换为 UV 坐标

    我在球体上有一个 3d 点 想要将其转换为球体纹理上的 UV 点 有人可以指出正确的方向吗 我可以采用纯数学解决方案 Edit 我目前有这个 它不会返回正确的 UV 坐标 p 是球体上的 3d 点 mesh position 是球体的位置
  • 在 Unity 3D 中使用触摸输入在地形上移动相机

    我是 Unity 新手 我正在尝试弄清楚如何使用触摸输入在地图 地形上移动相机 摄像机将以 90 0 0 的旋转角度俯视地形 地形位于第 8 层 我用键盘移动它没有问题 现在我尝试移动到触摸 如果你想在 iOS 上保持预期的使用情况 那就非
  • 编写每个三角形/面具有纯色的 GLSL 片段着色器的方法

    我有顶点和三角形数据 其中包含每个数据的颜色triangle 面 不是每个顶点 即单个顶点由多个面共享 每个面可能具有不同的颜色 我应该如何在 GLSL 中解决这个问题以获得每个的纯色分配face正在渲染 通过平均顶点相邻多边形的颜色来计算
  • 给定 3D 空间中的一条线,如何找到从它到一点的角度?

    我在 3D 空间中有两组点 我想画一条穿过两组点的中心的线 然后找到从该线到每个点的角度 从那里开始 我将根据两个角度的接近程度来确定两组中的匹配点 我知道如何找到每组点的中心 只需将它们平均在一起 并且我知道如何将它们匹配 甚至考虑到它们
  • 3D 游戏的 Libgdx 渲染层

    在我的第一个 3D 游戏中 我现在想要渲染地板 它实际上是一个平面 不是 libgdxPlane on y 0 我想添加一个Texture到它 这样我就可以在每个级别有不同的楼层 现在我的问题是 创建和渲染这种纹理地板的最佳方法是什么 我考
  • 点列表的 3D 轮廓(凹壳)

    我有一个 C 中的 Vector3 点列表 我需要计算这些点的凹轮廓 确实有很多参考资料 特别是对于 凸 分辨率 由于格雷厄姆算法 我已经成功实现了 然而 由于我现在需要有效地计算凹轮廓 所以我迷失了 维基百科确实列出了很多用于凸计算的资源
  • OpenGL Z 偏置(多边形偏移)限制

    我有两个共面的多边形 我尝试做 glEnable GL POLYGON OFFSET FILL glPolygonOffset 0 1 并期望其中一个明显 位于 另一个之上 这种情况直到大约 70 75 个单位之外 近剪裁平面为 1 远剪裁
  • OpenGL z轴指向哪里?

    我正在尝试了解 OpenGL 坐标系 我到处都看到它被描述为右撇子 但这与我的经验不符 我尝试绘制一些形状和 3 d 对象 我发现 z 轴显然指向 屏幕 而 x 指向右侧 y 指向上方 这是左手坐标系的描述 我缺少什么 编辑 例如 http
  • 投影 3D 网格的 2D 轮廓算法

    给定 一个 3D 网格 由一组顶点和三角形定义 并用这些点构建网格 问题 找到任意平面上投影的任意旋转网格的二维轮廓 投影很容易 挑战在于找到平面中投影三角形边的 外壳 我需要一些有关研究该算法的输入 指针的帮助 为简单起见 我们可以假设
  • 3D 数学:根据“向上”和“向上”正交向量计算倾斜(滚动)角度

    我希望这是提出这个问题的正确位置和这个一样 https stackoverflow com questions 3035590 bank angle from up vector and look at vector 但表示为纯数学而不是图
  • 将大块位图转换为 3 维位图

    Problem 我需要这个大量的数据作为输入 对于基于C的arduino 这是上面示例中所需格式的大量数据 const byte bitmap 8 8 0xFF 0x81 0x81 0x81 0x81 0x81 0x81 0xFF 0x81
  • 在球体边缘绘制点

    因此 来自 Flash 背景的我对一些简单的 2D 三角函数有很好的理解 在带有 I 圆的二维中 我知道使用给定角度和半径将项目放置在边缘上的数学 x cos a r y sin a r 现在 如果我在 3d 空间中有一个点 我知道球体的半
  • 更改 3D 图形颜色 (matplotlib)

    我使用以下代码在 matplotlib 中绘制了 3D 图形 Previously defines lists of data to plot fig plt figure ax fig add subplot 111 projection

随机推荐

  • 【毕业项目】自主设计HTTP

    博客介绍 运用之前学过的各种知识 自己独立做出一个HTTP服务器 自主设计WEB服务器 背景 目标 描述 技术特点 项目定位 开发环境 WWW介绍 网络协议栈介绍 网络协议栈整体 网络协议栈细节 与http相关的重要协议 HTTP背景知识补
  • 最强自动化测试框架Playwright(11)- 录制视频

    视频 使用playwright 您可以录制测试视频 录制视频 视频在测试结束时在浏览器上下文关闭时保存 如果手动创建浏览器上下文 请确保等待 browser context close context browser new context
  • 分布式任务调度可选方案

    1 除了基于jvm的java之处 新接触一个JVM语言 SCALA 一种同时面向脚本和面向函数的语言 spark大数据框架是基于scala语言 照着网络教程 简单的写了几个例子 感觉object class与java语境中还是有一定的差异
  • 2023美赛F题完整数据代码模型成品文章思路-- Green GDP

    论文摘要 模型和其他部分内容如下 摘要 现行的以GDP为核心的国民经济核算体系 由于忽略非市场产出 环境破坏 资源浪费方面的有关计算 这样的指标并不完整 由于经济活动中 对资源消耗和对环境的负面影响越来越大 而长期忽略这种负面影响的后果 高
  • Hexo在多台电脑上提交和更新

    文章目录 1 博客搭建 2 创建一个新文件夹new 用于上传hexo博客目录 3 github上创建hexo分支并设置为默认分支 创建hexo分支 将hexo分支设置为默认分支 4 进入新建的文件夹中git clone 再上传相关文件至he
  • navicat for mysql 连接 mysql 出现1251错误

    navicat for mysql下载地址 链接 https pan baidu com s 1Nh2ippFKHrWXnzPx hda8g 密码 fumf 客户端使用navicat for mysql 本地安装了mysql 8 0 但是在
  • CVE-2023-35843:NocoDB任意文件读取漏洞复现

    文章目录 NocoDB 存在任意文件读取漏洞CVE 2023 35843 0x01 前言 0x02 漏洞描述 0x03 影响范围 0x04 漏洞环境 0x05 漏洞复现 1 访问漏洞环境 2 构造POC 3 复现 0x06修复建议 Noco
  • zookeeper选举流程源码分析

    zookeeper选举流程源码分析 选举的代码主要是在QuorumPeer java这个类中 它有一个内部枚举类 用来表示当前节点的状态 public enum ServerState LOOKING FOLLOWING LEADING O
  • 关于vue项目的node、node-sass、sass-loader的版本问题

    后续博客全部搬迁至个人博客 欢迎访问 最近遇到一个问题 在下载vue项目的node modules的包时 node sass和sass loader版本总是不匹配 当两者匹配时 node和node sass版本又不匹配 导致我的服务一直起不
  • 简历中场景

    场景一 消息的发送 接收 利用rabbitmq的单通道模式 实现专家端发送消息 老师端监听消息 流程 subject accept server中producer消息 mq message中consumer监听消息 并保存在数据库中 调用m
  • 安装potobuf(make check通过)

    很多文章中给出的方法是在github上下载项目 然后创建build再安装googletest 但是在最后的make check时一直报错 如果是python中使用 直接sudo pip3 install i https pypi tuna
  • Spring 3整合Quartz 2实现定时任务一:常规整合

    最近工作中需要用到定时任务的功能 虽然Spring3也自带了一个轻量级的定时任务实现 但感觉不够灵活 功能也不够强大 在考虑之后 决定整合更为专业的Quartz来实现定时任务功能 首先 当然是添加依赖的jar文件 我的项目是maven管理的
  • Cannot run program “D:\Environment\jdk1.8\bin\java.exe”解决方法

    Cannot run program D Environment jdk1 8 bin java exe in directory D Project Java Idea project docker springboot CreatePr
  • Scratch的广播与消息

    在事件积木中 有一块触发积木叫当接收到 消息1 对应地 有两块积木 广播 消息1 广播 消息1 并等待 广播 消息机制就是编程中的全局事件 当一个消息被广播时 所有角色 包含广播者自身 都会接收到该消息 只要一个角色有该消息的接收脚本 即可
  • 【Linux】进程程序替换 &&简易mini_shell实现

    文章目录 替换原理 替换函数 替换函数的使用 简易shell实现程序 替换原理 目前 我们使用fork创建子进程 为了用if else让子进程执行父进程代码的一部分 如果想让子进程执行一个全新的程序 进程不变 仅仅替换当前进程的代码和数据
  • python怎么自学

    其实0基础选择python学习入行的不在少数 Python近段时间一直涨势迅猛 在各大编程排行榜中崭露头角 得益于它多功能性和简单易上手的特性 让它可以在很多不同的工作中发挥重大作用 正因如此 目前几乎所有大中型互联网企业都在使用 Pyth
  • 图像识别(九)

    大家好啊 我是董董灿 很多同学在做深度学习时 都会遇到难以理解的算法 SoftMax肯定是其中一个 初学者大都对它一知半解 只知道SoftMax可以用来做分类 输出属于某个类别的概率 但是 为什么要用SoftMax呢 这个算法又是如何将神经
  • javascript原型、原型链、继承详解

    一 原型和原型链的基本概念 在JavaScript中 每个对象都有一个原型对象 prototype 原型对象就是一个普通的对象 在创建新对象时 可以将该对象作为新对象的原型 原型对象可以包含共享的属性和方法 这些属性和方法可以被新对象继承和
  • ajax异步加载和cmd,异步传输Ajax(JQ)

    异步传输Ajax JQ JSP 服务器 Stringstr name a 张三 a 李四 age 18 resp getWriter write str 客户端 function button eq 0 click function aja
  • 基于组合优化的3D家居布局生成看千禧七大数学难题之NP问题

    本文探讨了运筹学和组合优化方法在3D家居布局生成中的应用 并调研了AI生成3D场景布局的最新方法 文中结合了家居家装业务的实际应用场景 从算法建模和计算复杂度的角度上阐述了室内设计的布局问题中存在的难点 以及如何用简化和近似的思想来建模3D