Mip-NeRF翻译

目录

Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields

摘要

1. Introduction 

2、Related Work

Anti-aliasing in Rendering

Scene Representations for View Synthesis

3、Method

3.1、Cone Tracing 锥形跟踪and Positional Encoding

3.2、Architecture

4.result

Multiscale Blender Dataset

Blender Dataset

Supersampling

5.结论


https://zhuanlan.zhihu.com/p/454514897

Mip-NeRF论文阅读笔记_Xuanqing_C的博客-CSDN博客

Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields

摘要

神经辐射场(NeRF)使用的渲染程序对每像素有单条射线的场景进行采样,因此,当训练或测试图像观察不同分辨率的场景内容时,可能会产生过于模糊或失真的渲染。对于NeRF来说,通过每像素渲染多条射线来实现超采样的直接解决方案是不切实际的,因为渲染每条射线需要查询一个多层感知器数百次。我们的解决方案,我们称之为“mip-NeRF”(`aa“mipmap”),扩展了NeRF,以连续值尺度表示场景。通过有效地渲染抗锯齿的锥形圆台 anti-aliased conical frustums而不是射线,mip-NeRF减少了令人反感的锯齿伪影,并显著提高了NeRF表示细节的能力,同时也比NeRF快7%,and是尺寸的一半。与NeRF相比,mip-NeRF在NeRF提供的数据集上的平均错误率降低了17%,在我们提供的数据集上的平均错误率降低了60%。Mip-NeRF也能够在我们的多尺度数据集上匹配蛮力超采样NeRF brute-force supersampled NeRF的精度,同时速度快22×。

1. Introduction 

尽管NeRF及其变体在一系列视图合成任务中显示出令人印象深刻的结果,但NeRF的渲染模型在某方面存在缺陷,可能导致过度的模糊和混叠excessive blurring and aliasingNeRF用连续的体积函数取代了传统的离散采样几何,参数化为多层感知器(MLP),从输入的5D坐标(3D位置和2D观看方向)映射到该位置的场景属性(体积密度和视图相关的发射辐射emitted radiance)。为了渲染一个像素的颜色,NeRF将一条光线通过该像素并输出到其体积表示中,查询沿该射线样本的场景属性的MLP,并将这些值合成成单一颜色。

当所有的训练和测试图像都从大致恒定的距离观察场景内容时,这种方法效果很好(在NeRF和大多数后续实验中,这种方法这样做),但NeRF渲染在不那么设计的场景中显示出显著的伪影。当训练图像以多个分辨率观察场景内容时,恢复的NeRF的渲染在近距离视图中显得过于模糊,并且在远处视图中包含混叠伪影。一个简单的解决方案是采用离线光线追踪中使用的策略通过使多个光线通过其足迹,对每个像素进行超采样。但对于像NeRF这样的神经体积表示来说,这是非常昂贵的,它需要数百个MLP评估来渲染单条射线,而需要几个小时来重建单个场景。

在本文中,我们从用于防止计算机图形化管道中的混叠的混合映射方法中获得灵感。mipmap表示在一组不同的离散降采样尺度下的信号(通常是图像或纹理map),并根据像素足迹pixel footprint在与该光线相交的几何图形上的投影选择适当的尺度。这种策略被称为预过滤 pre-filtering,,因为抗锯齿的计算负担从渲染时间(如在强力超采样解决方案中)转移到预计算阶段——对于给定的纹理,只需要为mipmap创建一次,无论该纹理被渲染多少次。

图1:NeRF(a)采样点x沿光线,从投影中心到每个像素,然后用位置编码(PE)γ对这些点进行编码,产生一个特征γ(x)。Mip-NeRF(b)则了由相机像素定义的三维圆锥形挫折。然后用我们的积分位置编码(IPE)实现这些锥形积分,它的工作原理是用多元高斯坐标逼近积分,然后在高斯坐标的位置编码上计算(封闭形式)积分E(γ(x)]

我们的解决方案,我们称之为mip-NeRF(参数NeRF中的多值,如“mipmap”),扩展了NeRF,同时表示连续尺度空间的预过滤辐射场。mip-NeRF的输入是一个三维高斯分布,它表示辐射场应该被积分的区域。如图1所示,我们可以通过沿锥体间隔查询mip-NeRF来渲染预过滤像素,使用近似于像素对应的 conical frustums的高斯分布。为了对一个三维位置及其周围的高斯区域进行编码,我们提出了一种新的特征表示方法:一种集成的位置编码(IPE) an integrated positional encoding。这是对NeRF的位置编码(PE)的一种推广,它允许一个空间区域被紧凑地特征化featurized,而不是空间中的单个点。

Mip-NeRF大大提高了NeRF的准确性,并且在不同分辨率下观察到场景内容的情况下(即摄像机越来越远离场景的设置),这种好处甚至更大。在我们提出的一个具有挑战性的多分辨率基准测试中,mip-NeRF能够相对于NeRF平均降低60%的错误率(可视化见图2)。Mip-NeRF的尺度感知结构还允许我们将NeRF用于分层采样[30]的单独的“粗”和“细”MLPs合并到一个MLP中。因此,mip-NeRF比NeRF略快(∼为7%),其参数数量只有它的一半

 图2:(a,上图)在全分辨率图像上训练的NeRF能够在新的视图位置产生逼真的效果图,但只能在训练图像的分辨率或尺度上。(a,底部)将相机拉回并放大(或者类似地,调整相机的内部结构以降低图像分辨率,就像这里所做的那样)会导致渲染显示出严重的混叠。(b)在多分辨率图像上训练一个NeRF略微改善了这个问题,但会导致跨尺度的劣质渲染:全分辨率下的模糊和低分辨率下的“抖动”。(c)MipNeRF,也在多分辨率图像上进行训练,能够产生不同尺度的逼真渲染。每个图像相对于地面真实(d)的SSIMs被插入,两个标度的最高SSIM用红色表示。

2、Related Work

Anti-aliasing in Rendering

减少混叠效应(“anti-aliasing”)通常是通过超采样预过滤来完成的。基于超采样的技术[ An improved illumination model for shaded display]在渲染时每像素投射多条光线,以便进行更接近奈奎斯特 Nyquist频率的采样。这是减少混叠的有效策略,但它代价昂贵,因为运行时通常与超采样率呈线性关系。因此,超采样通常只在离线渲染上下文中使用。基于预滤波的技术使用场景内容的低通滤波版本来减少不带混叠的渲染场景所需的奈奎斯特频率。预滤技术[18,20,32,49]更适合于实时渲染,因为场景内容的过滤版本可以提前预先计算,并且根据目标采样率,可以在渲染时间使用正确的“比例”。在渲染的环境中,预过滤可以被认为是追踪一个锥,而不是通过每个像素[1,16]的光线:在圆锥体与场景内容相交的任何地方,一种预先计算好的场景内容的多尺度表示(如稀疏体素八叉树[15,21]或mipmap[47])以与圆锥体的足迹对应的比例进行查询。

我们的工作从这一行的图形工作中获得灵感,并为NeRF提供了一个多尺度的场景表示。我们的策略与传统图形管道中使用的多尺度表示有两个关键方面的不同。首先,我们不能预先计算多尺度表示,因为在我们的问题设置中,场景的几何形状不是提前知道的我们正在使用计算机视觉恢复一个场景模型,而不是渲染一个预定义的CGI资产。因此,Mip-NeRF必须在训练过程中学习场景的预过滤表示。其次,我们的概念是全分辨率1/8的尺度分辨率是连续的,而不是离散的。mip-NeRF学习使用固定数量的多个副本(如在mipmap中)表示场景,而是学习一个单一的神经场景模型,可以在任意尺度上查询该神经场景模型

Scene Representations for View Synthesis

最近的体积方法使用基于梯度的学习来训练深度网络来预测场景[12,25,29,38,41,53]的体素网格表示基于离散体素的表示对于视图合成是有效的,但它们不能很好地扩展到更高分辨率的场景

用基于坐标的神经表示取代这些离散表示,这些神经表示将三维场景表示为由mlp参数化的连续函数从三维坐标映射到该位置的场景属性。一些最近的方法使用基于坐标的神经表示来建模场景作为隐式曲面[31,50],但大多数最近的视图合成方法是基于体积NeRF表示[30]。在使用基于坐标的神经表示的视图合成中,采样和混叠的问题相对较少用于视图合成的离散表示,如多边形网格和体素网格,可以使用传统的多尺度预过滤方法,如mipmap和八叉树。然而,基于坐标的视图合成神经表示目前只能使用超采样来抗锯齿,这加剧了它们本已缓慢的渲染过程。Mip-NeRF解决了这个开放的问题,能够在训练和测试过程中有效地渲染抗锯齿图像,以及在训练过程中使用多尺度图像

3、Method

如前所述,NeRF的点采样使其容易受到与采样和混叠相关的问题的影响:虽然一个像素的颜色是像素内所有入射辐射的积分,NeRF每个像素投射一个无限小的射线,导致混叠。MipNeRF通过从每个像素中投射一个圆锥体来改善了这个问题。我们不是沿着每条射线进行点采样,而是将圆锥切割成一系列conical frustums(垂直于它们的轴的圆锥)。我们没有从空间中无穷小的点构造位置编码(PE)特征,而是构造了一个conical frustums所覆盖的体积的集成位置编码(IPE)表示。这些变化使MLP可以推断每个conical frustum的大小和形状,而不仅仅是它的质心。图3可视化了由于NeRF对尺度的不敏感和mip-NeRF对这个问题的解决方案所导致的模糊性。这种conical frustums和IPE特性的使用也允许我们将NeRF的两个独立的“粗”和“细”mlp减少为一个单一的多尺度MLP,从而提高了训练和评估速度,并减少了50%的模型大小。

图3:NeRF的工作原理沿着每个像素的射线提取点采样的位置编码特征(这里以点表示)。这些点采样特征忽略了每条射线所观察到的体积的形状和大小因此两个不同的摄像机在不同的尺度上成像相同的位置,可能会产生相同的模糊的点采样特征,从而显著降低了NeRF的性能。相比之下,Mip-NeRF投射锥而不是射线,并明确地模拟每个采样的conical frustum的体积(这里显示为梯形),从而解决了这种模糊性

3.1、Cone Tracing 锥形跟踪and Positional Encoding

在这里,我们描述了mip-NeRF的渲染和特征过程featurization procedure,在这个过程中,我们铸造一个圆锥体并沿着圆锥体形成conical frustums。与在NeRF中一样,mipNeRF中的图像一次被渲染一个像素,所以我们可以用被渲染的单个感兴趣的像素来描述我们的过程。对于这个像素,我们从相机的投影中心o沿着穿过像素中心的方向d投射一个圆锥体。该锥的顶点为o,该锥在像平面 image plane上的半径参数化为r。我们r将设置为世界坐标中按2/√12的像素的宽度,从而产生一个锥其在图像平面上的截面在x和y上的方差与像素足迹的方差相匹配。位于两个t值[t0,t1]之间的conical frustums内(如图1所示)的位置x集合为:

我们现在必须在这个conical frustum内构造一个特征的体积表示。理想情况下,这种特征化的表示应该与NeRF中使用的位置编码特征相似,因为Mildenhal等人表明,这种特征表示对NeRF的成功至关重要。有许多可行的方法,但我们发现的最简单和最有效的解决方案是简单地计算圆锥锥conical frustum内的所有坐标的期望位置编码

然而,目前尚不清楚如何有效地计算这样一个特征,因为分子中的积分没有封闭形式的解。因此,我们用多元高斯近似conical frustum,这允许一个期望的有效近似特征,我们将称之为“集成位置编码”(IPE)

为了用多元高斯分布近似conical frustum,我们必须计算F(x,·)的均值和协方差。因为每个conical frustum被假定为圆形的,并且因为conical frustum是围绕锥轴对称的,这种高斯分布完全由三个值来表征(除了od):

这些量相对于进行参数化,这对数值稳定性至关重要。有关详细的推导方法,请参阅本附录。我们可以将这个高斯曲线从conical frustum的坐标系转换为世界坐标如下:

给出了我们最后的多元高斯分布

接下来,我们推导出IPE,它是根据上述高斯分布的位置编码坐标的期望。为了实现这一点,首先将方程1中的PE重写为傅里叶特征是有帮助的:

这种重新参数化允许我们为IPE推导出一个封闭的形式。利用一个变量的线性变换的协方差是一个变量的协方差的线性变换(Cov[Ax, By] = A Cov[x, y]BT)当我们的conical frustum Gaussian曲线被提升到PE基P后,我们可以识别出conical frustum Gaussian的均值和协方差

产生IPE特征的最后一步是计算这个提升的多元高斯分布的期望由位置的正弦和余弦调制。这些期望有一些简单的封闭形式的表达式:

我们可以看到,这个期望的正弦或余弦只是被方差的高斯函数所衰减的均值的正弦或余弦。有了这个,我们可以计算我们最终的IPE特征as the expected期望 sines and cosines of the mean and the diagonal of the covariance matrix

其中,◦表示元素级乘法。因为位置编码独立地对每个维度进行编码,所以这种期望的编码只依赖于γ(x)的边际分布,并且只需要协方差矩阵的对角线(每维方差的向量)。由于Σγ的尺寸相对较大,因此计算成本非常高,所以我们直接计算Σγ的对角线

这个向量仅依赖于三维位置的协方差Σ的对角线,可以计算为:

如果这些对角线直接计算,IPE特征大致与PE特征一样昂贵

图4:NeRF(左)使用的位置编码(PE)的Toy 1D visualizations和我们的集成位置编码(IPE)(右)的一维可视化。因为NeRF沿着每条射线采样点,并对所有频率的编码相等,所以高频PE特征aliased锯齿,这导致了渲染伪影通过对每个区间上的PE特征进行积分,当频率周期比被积分的区间大小较小时,IPE特征的高频维数缩小为零,导致抗锯齿的特性,隐式编码间隔的大小(在更高的维度,形状)。

图4可视化了IPE和传统的PE特征在 a toy 1D domain之间的区别。IPE特征的行为很直观:如果位置编码中的一个特定频率的周期大于用于构造IPE特征的区间的宽度,那么该频率下的编码就不受影响。但是,如果周期小于区间(在这种情况下,该区间上的PE会反复振荡),那么该频率下的编码就会缩小为零简而言之,IPE保留了在一个间隔上恒定的频率,并温和地“删除”在一个间隔上变化的频率,而PE保留了一些手动调整的超参数L。通过以这种方式缩放每个正弦和余弦,IPE特征是有效的抗锯齿的位置编码特征,平滑地编码空间体积的大小和形状。IPE还有效地删除了L作为一个超参数:它可以简单地设置为一个非常大的值,然后从不调整(见补充)。

3.2、Architecture

除了锥体追踪IPE特征外,mip-NeRF的行为与NeRF类似,如第2.1节所述。对于被渲染的每个像素,一个圆锥体被铸造cast,而不是像NeRF中那样的射线。我们没有沿射线对tk采样n个值,而是对tk采样n+1个值前面描述的跨越spanning 每个采样tk相邻对 each adjacent pair的间隔interval 计算IPE特征。这些IPE特征被作为输入传递到MLP中,以产生密度τk颜色ck,如式2所示。在mip-NeRF中的渲染遵循公式3。

每个射线位置γ(r(tk))位置编码作为输入到由权重Θ参数化的MLP,MLP输出密度τRGB颜色c

其中,C(r;Θ,t)是该像素的最终预测颜色

回想一下,NeRF使用了两个不同的mlp,一个是“粗”,一个是“细”(见公式4)

这在NeRF中是必要的,因为它的PE特性意味着它的mlp只能学习一个单一尺度one single scale的场景模型。但是我们的锥体铸造cone castingIPE特性允许我们显式地将尺度编码到输入特性中,从而使MLP能够学习场景的多尺度multiscale表示。因此,Mip-NeRF使用一个带有参数Θ的单一MLP我们在分层采样策略中重复查询它。这样做有很多好处模型的大小被分成两半,渲染更准确,采样效率更高,整个算法也变得更简单。我们的优化问题是:

因为我们有一个单一的MLP,“粗”损失必须与“细”损失相平衡,这是使用一个超参数λ来完成的(我们在所有实验中都设置了λ=0.1)。如米尔登霍尔等人,[30]我们的粗样本tc是通过分层抽样产生的,而我们的细样本tf是通过使用逆变换抽样 inverse transform sampling从所得到的alpha合成权值w中抽样的。与NeRF不同的是,细MLP得到了64个粗样本和128个细样本的排序联合,在mip-NeRF中,我们只取样128粗模型的样本和来自精细模型的128个样本(产生与NeRF相同数量的总MLP评估,以进行公平比较)。在采样tf之前,我们稍微修改了权重w

我们用一个2次的最大滤波器2-tap max filter过滤w,然后是一个2次的模糊过滤器2-tap blur filter(一个“blurpool”),它在w上产生一个宽而平滑的上包络wide and smooth upper envelope。在超参数α被重新归一化,和到1,这确保了一些样本甚至在空间的空区域绘制(我们在所有实验中设置α=0.01)。

Mip-NeRF是在JaxNeRF[JaxNeRF: an efficient JAX implementation of NeRF, 2020. http://github.com/google-research/google-research/tree/master/jaxnerf. ]之上实现的,这是NeRF的JAX[JAX: composable transformations of Python+NumPy programs, 2018. http://github.com/google/jax]重新实现,比原来的TensorFlow实现获得更好的精度和训练速度更快。我们遵循NeRF的训练程序:Adam[19]的100万次迭代,批处理大小为4096,学习速率从5·10−4到5·10−6进行对数退火。有关JaxNeRF和mip-NeRF之间的更多细节和一些其他差异,请参阅补充部分,这些差异对性能没有显著影响,而是我们的主要贡献的附带因素:锥体追踪cone-tracing、IPE和单一多尺度single multiscale MLP的使用。

4.result

我们在原始NeRF论文[30]中提出的Blender数据集上评估了mip-NeRF,以及该数据集的一个简单的多尺度变体,该数据集旨在更好地探测多分辨率场景的准确性,并强调NeRF在此类任务上的关键漏洞。我们报告了NeRF使用的三个错误指标:PSNRSSIM[45]和LPIPS[52]。为了便于比较,我们还提出了一个“平均”误差度量它总结了所有三个度量:MSE=10−PSNR/10的几何平均值,√(1−SSIM)(根据[5])和LPIPS的几何平均值。此外,我们还报告了运行时(壁时间wall time的中位数和中位数绝对偏差)以及NeRF和mip-NeRF的每个变体的网络参数的数量。所有的JaxNeRF和mip-NeRF实验都是在一个带有32核[17]的TPUv2上进行训练的。

我们构建了我们的多尺度Blender基准,是因为NeRF使用的原始Blender数据集有一个微妙但关键的弱点所有的相机都有相同的焦距和分辨率,并且被放置在距离物体相同的距离上。因此,这个Blender任务比大多数现实世界的数据集要容易得多,在大多数现实数据集中,相机可能离主题更近或更远,或者可能放大或缩小。该数据集的局限性被NeRF的局限性所补充:尽管NeRF倾向于产生混叠渲染,但它能够在Blender数据集上产生优秀的结果,因为该数据集系统地避免了这种故障模式。

Multiscale Blender Dataset

我们的多尺度Blender数据集是对NeRF的Blender数据集的一个直接修改,设计用于探测混叠和尺度空间推理。该数据集是通过拍摄Blender数据集中的每个图像,将其进行2、4和8倍的盒子降采样box downsampling(并相应地修改相机本质),并将原始图像和三个降采样图像组合到一个数据集。由于射影几何的性质,这类似于重新渲染原始数据集,其中到相机的距离已经增加了2、4和8的比例因子。当训练mipNeRF在这个数据集,我们根据该像素在原始图像中的足迹面积来衡量每个像素的损失(1/4图像的像素损失 is scaled by 16,等等),因此,少数低分辨率像素与许多高分辨率像素具有相当的影响。这个任务的平均误差度量使用了所有四个尺度上的每个误差度量的算术平均值。

mip-NeRF的性能见表1。因为NeRF是Blender数据集上的最新技术(如表2所示),所以我们只对NeRF和几个改进的NeRF版本进行了评估:“Area Loss”根据mip-NeRF使用的像素面积对上述损失函数的缩放“Centered Pixels”为每条光线的方向增加了一个半像素的偏移量,这样光线就会通过每个像素的中心(而不是像米尔登霍尔等人所做的每个像素的角落)。而“Misc”增加了一些小的变化,略微提高了训练的稳定性(见附录)。我们还评估对几个消融mip-NeRF:“w/o Misc”删除这些小变化,“w/o Single MLP”使用网的two-MLP训练方案从方程4,“w/o Area Loss”删除按像素区域缩放的损失,和“w/o IPE”使用PE而不是IPE,导致mip-NeRF使用网的射线铸造ray-casting(中心像素),而不是我们的锥铸造。

表1:在我们的多尺度Blender数据集上,mip-NeRF及其消融与NeRF和几个NeRF变体的定量比较。详情请参见文本。

Mip-NeRF在这个任务上减少了60%的平均误差,并且在所有指标和所有尺度上都大大优于NeRF。“Centering” pixels大大提高了NeRF的性能,但不足以接近mip-NeRF。去除IPE特征会导致mip-NeRF的性能下降到“Centered” NeRF的性能,从而证明锥铸造和IPE特性是驱动性能的主要因素(尽管面积损失贡献很大)。“Single MLP”mip-NeRF消融表现良好,但有两倍的参数比mip-NeRF慢近20%(可能是因为这种消融需要对t值进行排序,以及由于它在“粗”和“细”尺度上的张量大小变化)。Mip-NeRF也比NeRF快~7%。请参见图9和关于可视化的补充部分。

Blender Dataset

虽然mipNeRF被设计用来解决的采样问题在多尺度Blender数据集中最为突出,但mip-NeRF在米尔登霍尔等人[30]提供的更简单的单尺度Blender数据集上也优于NeRF,如表2所示。我们根据NeRF、NSVF[24]使用的基线以及以前使用的相同变体和消融进行评估(不包括“区域损失”,mip-NeRF没有使用它)。尽管不如多尺度Blender数据集引人注目,mip-NeRF能够减少17%的∼平均误差,同时也更快。这种性能上的改进在具有挑战性的情况下最为明显,如小结构或薄结构,如图6所示。

Supersampling

正如在引言中所讨论的,mipNeRF是一种抗混叠的预过滤方法。另一种方法是超采样,它可以在NeRF中通过每个像素投射多个抖动射线来实现。因为我们的多尺度数据集由全分辨率图像的降采样版本组成,我们可以通过训练一个NeRF来构建一个“超采样的NeRF”( “NeRF + Area, Center, Misc.”。以前表现最好的变体)只使用全分辨率图像,然后只渲染全分辨率图像,然后我们手动对其进行降采样。这个基线有一个不公平的优势:我们手动删除多尺度数据集中的低分辨率图像,否则将降低NeRF的性能,如前面演示的所示。这种策略在大多数真实数据集中是不可行的,因为通常不可能先验地知道哪些图像对应于图像内容的尺度。尽管这一基线的优势,mip-NeRF的准确性匹配,而速度快∼22×(见表3)。

表3:mip-NeRF和我们改进的NeRF变体的比较,其中两种算法都是超采样的(“SS”)。Mip-NeRF几乎与“SSNeRF”的精度相当,同时又快了22×。在mip-NeRF中添加超采样可以略微提高其精度。我们报告了呈现测试集的时间,归一化到 seconds-per-megapixel兆像素(训练时间与表1和表2相同)。

5.结论

我们提出了mip-NeRF,一个多尺度的NeRF样模型,解决了NeRF的固有混叠NeRF的工作原理投射射线,编码这些光线上的点的位置,并在不同的尺度上训练不同的神经网络。相比之下,mip-NeRF投射锥体,编码conical frustums的位置和大小,并训练一个单一的神经网络,在多个尺度上模拟场景。通过明确的抽样和规模推理,mip-NeRF能够在我们自己的多尺度数据集上将相对于NeRF的错误率降低60%,在NeRF的单尺度数据集上将错误率降低17%,同时也比NeRF快7%。Mip-NeRF也能够匹配一个蛮力超采样NeRF变体的准确性,同时更快22×。我们希望这里提出的一般技术将对其他致力于提高基于射线追踪的神经渲染模型的性能的研究人员有价值。

  • 16
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于流水车间调度问题的求解,可以使用python-mip库来实现。python-mip是一个基于MIP(Mixed Integer Programming,混合整数规划)的数学优化库,它可以用来解决各种优化问题。 在流水车间调度问题中,我们需要考虑各个工序的顺序和时间,以及机器的可用性等因素,以最小化总的完成时间或最大化生产效率为目标。 以下是一个简单的示例代码,使用python-mip库来求解流水车间调度问题: ```python from mip import Model, xsum, minimize, ConstrsGenerator # 定义工序数量、机器数量和工序时间 num_jobs = 3 num_machines = 2 job_times = [[2, 3], [4, 2], [3, 1]] # 创建模型 m = Model() # 创建变量 x = [[m.add_var(var_type='B') for _ in range(num_machines)] for _ in range(num_jobs)] # 创建约束条件 for j in range(num_jobs): m.add_constr(xsum(x[j][k] for k in range(num_machines)) == 1) # 每个工序只能在一个机器上执行 for k in range(num_machines): m.add_constr(xsum(x[j][k] * job_times[j][k] for j in range(num_jobs)) <= 8) # 每个机器的总执行时间不能超过8 # 定义目标函数 m.objective = minimize(xsum(x[j][k] * job_times[j][k] for j in range(num_jobs) for k in range(num_machines))) # 求解模型 m.optimize() # 输出结果 print('Optimal schedule:') for j in range(num_jobs): for k in range(num_machines): if x[j][k].x >= 0.99: print(f'Job {j+1} on machine {k+1}') ``` 在上述代码中,我们首先定义了工序数量、机器数量和每个工序在每台机器上的执行时间。然后创建模型,并创建变量和约束条件。最后定义目标函数为最小化总的执行时间,并求解模型。 这是一个简单的示例,实际的流水车间调度问题可能更加复杂,需要根据具体情况进行调整和扩展。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值