天道酬勤,学无止境

discrete-mathematics

如何对矩阵上的函数进行离散优化?(How to perform discrete optimization of functions over matrices?)

问题 我想对条目为 0 或 1 的所有 30 x 30 矩阵进行优化。我的目标函数是行列式。 一种方法是某种随机梯度下降或模拟退火。 我查看了 scipy.optimize 但据我所知,它似乎不支持这种优化。 scipy.optimize.basinhopping 看起来很诱人,但它似乎需要连续变量。 Python 中是否有用于这种一般离散优化的工具? 回答1 我认为遗传算法在这种情况下可能会很好地工作。 这是一个使用 deap 组合在一起的快速示例,大致基于此处的示例: import numpy as np import deap from deap import algorithms, base, tools import imp class GeneticDetMinimizer(object): def __init__(self, N=30, popsize=500): # we want the creator module to be local to this instance, since # creator.create() directly adds new classes to the module's globals() # (yuck!) cr = imp.load_module('cr', *imp.find_module('creator'

2021-09-22 04:41:08    分类:技术分享    python   numpy   scipy   mathematical-optimization   discrete-mathematics

如何对矩阵上的函数进行离散优化?(How to perform discrete optimization of functions over matrices?)

问题 我想对条目为 0 或 1 的所有 30 x 30 矩阵进行优化。我的目标函数是行列式。 一种方法是某种随机梯度下降或模拟退火。 我查看了 scipy.optimize 但据我所知,它似乎不支持这种优化。 scipy.optimize.basinhopping 看起来很诱人,但它似乎需要连续变量。 Python 中是否有用于这种一般离散优化的工具? 回答1 我认为遗传算法在这种情况下可能会很好地工作。 这是一个使用 deap 组合在一起的快速示例,大致基于此处的示例: import numpy as np import deap from deap import algorithms, base, tools import imp class GeneticDetMinimizer(object): def __init__(self, N=30, popsize=500): # we want the creator module to be local to this instance, since # creator.create() directly adds new classes to the module's globals() # (yuck!) cr = imp.load_module('cr', *imp.find_module('creator'

2021-09-22 04:39:44    分类:技术分享    python   numpy   scipy   mathematical-optimization   discrete-mathematics

如何从现有的“步骤列表”中定义匹配的轴槽口(How to define matching axis notches from existing "step list")

问题 我需要一种方法来在两个单独的轴上对齐刻度线,同时能够控制“步长”值(刻度线之间的值),其中两个轴都从标记 0 开始并以不同的最大值结束。 为什么会出现这个问题: Flot,JS 图表包有一个对齐刻度线的选项,但是当我这样做时,我无法控制步长值。 然而,我可以直接控制步长值,但是我失去了对齐刻度线的能力。 然而,我可以恢复定义我自己的最大值和步长值,以获得我需要的(对齐刻度线,同时保持所需的步长值),但我需要一些帮助。 产生这个问题(请继续阅读以了解详细信息)。 例子 设 a 为 A 轴上的最大值,b 为 B 轴上的最大值。 在这个例子中,让 a = 30,b = 82。假设我想要 6 个刻度线(不计算轴末端的额外刻度线)。 实际上,在尝试了一些之后,我猜到了 6。 一旦我有所需数量的刻度线,我可以做这样的事情: 30 / 6 = 5(我只是去 A 轴所需的步长值) 现在需要找出轴 B 的刻度对齐 82 / 6 = 13.67(不是一个好的价值,我更喜欢更圆润的东西) 将 B 的最大值移动到 90 ,其中 90 / 6 = 15(很好 - 我刚刚得到了 B 轴所需的步长值) 最终结果 输入: a_max = 30, b_max = 82 (实际上 a_max 可能是 28.5、29.42,b_max 可能是 84、85.345 等) 输出: a_adjusted_max =

2021-09-18 10:43:34    分类:技术分享    algorithm   math   flot   discrete-mathematics   number-theory

校验大量质数? (用于验证)(Checksumming large swathes of prime numbers? (for verification))

问题 是否有任何聪明的算法可以计算数百万或数十亿素数的高质量校验和? 即具有最大的错误检测能力并且可能是可分割的? 动机: 小素数 - 最大 64 位 - 可以根据需要筛选到每秒数百万个,通过使用小位图筛选潜在因子(最多 2^32-1)和第二个位图筛选数字目标范围。 算法和实现相当简单和直接,但问题在于细节:值往往会推动 - 或超过 - 无处不在的内置整数类型的限制,边界情况比比皆是(可以这么说),甚至浮点严格性的差异也可能导致如果编程不适合防御,则损坏。 更不用说优化编译器可能造成的混乱,即使是静态库中已经编译、已经测试过的代码(如果使用链接时代码生成)。 更不用说更快的算法往往更复杂,因此更脆弱。 这有两个后果:除非使用最终的可执行映像执行测试,否则测试结果基本上没有意义,并且非常需要在正常使用期间在运行时验证正确操作。 检查预先计算的值将提供最高程度的置信度,但所需的文件又大又笨重。 一个包含 1000 万个素数的文本文件,未压缩大约 100 MB,压缩超过 10 MB; 存储字节编码的差异需要每个素数一个字节,熵编码最多可以将大小减少一半(1000 万个素数为 5 MB)。 因此,即使文件只覆盖 2^32 以内的小因素,其重量也将达到 100 MB 左右,并且解码器的复杂性将超过窗口筛本身的复杂性。 这意味着检查文件是不可行的,除非作为对新建可执行文件的最终发布检查。

2021-09-15 05:04:05    分类:技术分享    primes   checksum   discrete-mathematics

校验大量质数? (用于验证)(Checksumming large swathes of prime numbers? (for verification))

问题 是否有任何聪明的算法可以计算数百万或数十亿素数的高质量校验和? 即具有最大的错误检测能力并且可能是可分割的? 动机: 小素数 - 最大 64 位 - 可以根据需要筛选到每秒数百万个,通过使用小位图筛选潜在因子(最多 2^32-1)和第二个位图筛选数字目标范围。 算法和实现相当简单和直接,但问题在于细节:值往往会推动 - 或超过 - 无处不在的内置整数类型的限制,边界情况比比皆是(可以这么说),甚至浮点严格性的差异也可能导致如果编程不适合防御,则损坏。 更不用说优化编译器可能造成的混乱,即使是静态库中已经编译、已经测试过的代码(如果使用链接时代码生成)。 更不用说更快的算法往往更复杂,因此更脆弱。 这有两个后果:除非使用最终的可执行映像执行测试,否则测试结果基本上没有意义,并且非常需要在正常使用期间在运行时验证正确操作。 检查预先计算的值将提供最高程度的置信度,但所需的文件又大又笨重。 一个包含 1000 万个素数的文本文件,未压缩大约 100 MB,压缩超过 10 MB; 存储字节编码的差异需要每个素数一个字节,熵编码最多可以将大小减少一半(1000 万个素数为 5 MB)。 因此,即使文件只覆盖 2^32 以内的小因素,其重量也将达到 100 MB 左右,并且解码器的复杂性将超过窗口筛本身的复杂性。 这意味着检查文件是不可行的,除非作为对新建可执行文件的最终发布检查。

2021-09-15 05:02:13    分类:技术分享    primes   checksum   discrete-mathematics

在 OpenGL 中绘制圆所需的边数(Number of Sides Required to draw a circle in OpenGL)

问题 有没有人知道一些算法来计算使用多边形近似圆所需的边数,如果半径,圆的 r 和多边形与圆度的最大偏离,D 给出? 我真的需要找到边数,因为我需要在 OpenGL 中绘制近似圆。 此外,我们有 P 给出的每像素 NDC 坐标中的屏幕分辨率,并求解 D = P/2,我们可以保证我们的圆在精度的半像素内。 回答1 您在这里描述的实际上是一个质量因素,它通常与误差估计密切相关。 我们处理这个问题的常用方法是计算圆周的一小部分的误差。 与连接圆周上相同两点的线段相比,最简单的是确定圆的切片的弧长差异。 您可以使用更有效的措施,如面积、半径等的差异,但这种方法应该足够了。 想想一个八边形,外接一个完美的圆。 在这种情况下,误差是八边形上两个相邻点之间的直线长度的差异,以及连接这两个点的圆的弧长。 弧长很容易计算: PI * r * theta ,其中r是您的半径, theta是两点之间的角度(以弧度为单位),假设您从这些点中的每一个到圆心画线/多边形。 对于具有n边的闭合多边形,角度仅为(2*PI/n)弧度。 令对应于这个n值的弧长等于A ,即A=2*PI*r/n 。 两点之间的线长很容易计算。 只需将你的圆分成n等腰三角形,每个三角形分成两个直角三角形。 您知道每个直角三角形的角度是theta/2 = (2*PI/n)/2 = (PI/n) ,斜边是r 。 所以,你得到了sin(PI/n

2021-09-12 21:15:24    分类:技术分享    opengl   geometry   trigonometry   mathematical-optimization   discrete-mathematics

Number of Sides Required to draw a circle in OpenGL

Does anyone know some algorithm to calculate the number of sides required to approximate a circle using polygon, if radius, r of the circle and maximum departure of the polygon from circularity, D is given? I really need to find the number of sides as I need to draw the approximated circle in OpenGL. Also, we have the resolution of the screen in NDC coordinates per pixel given by P and solving D = P/2, we could guarantee that our circle is within half-pixel of accuracy.

2021-09-05 22:26:41    分类:问答    opengl   geometry   trigonometry   mathematical-optimization   discrete-mathematics

How to define matching axis notches from existing "step list"

I need a way to align tick marks on two separate axis, while being able to control the "step" value (value between tick marks), where both axis start at mark 0 and end on a different maximum value. Why this problem: Flot, the JS charting package has an option to align tick marks, but when I do, I cannot control the step value. I can however control the step value directly, but then I lose the ability to align tick marks. I can however revert to defining my own max and step values, to get what I need (aligned tick marks while maintaining desired step value), but I need some help. yielding this

2021-09-05 03:55:33    分类:问答    algorithm   math   flot   discrete-mathematics   number-theory

How to solve a congruence system in python?

for the problem Ax ≡ B (MOD C) I did this, and it was okay: def congru(a,b,c): for i in range(0,c): if ((a*i - b)%c)== 0 : print(i) Now I have to solve a system of equations, where A = ( 5x + 7y) and A= (6x + 2y), and B= 4 and B = 12 , respectively, and C is 26. In other words: ( 5x + 7y)≡ 4 (mod 26) (6x + 2y)≡ 12 (mod 26) How do I do that? Thanks.

2021-08-30 18:40:14    分类:问答    python   algorithm   math   discrete-mathematics

寻找最小组件集合的算法(Algorithm for finding smallest collection of components)

问题 我正在寻找一种算法来解决以下问题。 我有给定集合 (ah) 的多个子集 (1-n)。 我想找到最小的子集集合,它允许我通过组合构建所有给定的子集。 此集合可以包含 1-n 中尚不存在的子集。 a b c d e f g h 1 1 2 1 1 3 1 1 1 4 1 1 5 1 1 6 1 1 1 1 7 1 1 1 1 8 1 1 1 9 1 1 1 下面是两个可能的集合,其中最小的一个包含七个子集。 我用 x 表示新的子集。 1 1 x 1 x 1 x 1 x 1 x 1 x 1 x 1 1 1 x 1 x 1 x 1 x 1 x 1 1 x 1 我相信这一定是一个已知问题,但我对算法不是很熟悉。 非常感谢任何帮助,以及对更好主题标题的建议。 谢谢! 更新 图形着色让我受益匪浅,谢谢。 但是,在我的情况下,允许子集重叠。 例如: a b c d 1 1 1 1 2 1 1 1 3 1 1 1 4 1 1 5 1 1 1 1 图形着色给了我这个解决方案: x 1 1 x 1 x 1 但这个也是有效的,而且更小: 1 1 1 1 4 1 1 回答1 这个问题被称为集合基,它是 NP 完全的(Larry J. Stockmeyer:集合基问题是 NP 完全的。技术报告 RC-5431,IBM,1975)。 它作为图问题的表述是二部维。 由于通常很难解决

2021-08-14 02:49:40    分类:技术分享    algorithm   combinations   graph-theory   mathematical-optimization   discrete-mathematics