标签: mathematical-optimization

包装算法

我有一组具有相关属性(重量,长度,宽度)的项目.我还有一套包装类型,带有相关属性(最大重量,长度,宽度)

我正在寻找一种算法来确定包装物品的最少数量的盒子.

到目前为止,我已经探讨了背包问题,虽然它可以接近,但我并没有完全处理重量,价值类型的问题.

这是一个例子:

项目:10 x项目#1,(每个1磅,24英寸长,12英寸宽)5个项目#2,(每个2磅,24英寸长,6英寸宽)

包装类型:小盒子(MaxWeight = 40lbs,24"x12")大盒子(MaxWeight = 75lbs,24"x24")

打包的可能方法是:2x小盒子 - >每种物品类型1x大盒子 - >其中的一切

我想要返回单个框的结果,但如果我可以返回所有可能的组合,那也可以.

algorithm packaging mathematical-optimization

2
推荐指数
1
解决办法
1801
查看次数

将位转换为值

计算机如何知道(int x,y)x << y意味着移位y位?我不是指转变部分.我的意思是那y部分.计算机是否将x移位1并从y中减去1直到y == 0?如果不是,计算机如何计算y的值?

如果说y = 10,那么二进制表示是0b1010.计算机不能简单地拿走1010它并使用它,可以吗?

我试图为大于8的位大小.由于值不是简单地存储为标准整数的数组,容器不表示值,因此重载运算符<<并且>>有点困难.但是,从100位数字倒计数到0有点效率低,所以我试图找到一种方法让计算机更快地理解位数.

c++ math bit-shift mathematical-optimization bitarray

2
推荐指数
1
解决办法
127
查看次数

scipy最小化slsqp,导致OverflowError:Python int太大而无法转换为C long

这个程序:

from __future__ import division
import numpy as np
from scipy.optimize import minimize
from collections import deque

def buy_captial():
    """ buys the profit maximizing amount of captial """
    offers = {'W': [{'quantity':50, 'price': 1}],
              'K': [{'quantity':200, 'price': 0.5}]}
    key_order = ('W', 'K')
    exponents = {'W': 0.6, 'K': 0.4}

    prices = {}
    quantities = {}
    for key in key_order:
        if key in offers:
            prices[key] = deque([offers[key][i]['price'] for i in range(len(offers[key]))])
            quantities[key] = deque([offers[key][i]['quantity'] for i in range(len(offers[key]))])

    print quantities
    budget = …
Run Code Online (Sandbox Code Playgroud)

python mathematical-optimization scipy

2
推荐指数
1
解决办法
2328
查看次数

如何在没有数学函数(arctan)的点和组织(0,0)之间计算快速通道角度(最接近八个提供值之一)?

如何在没有数学函数(arctan)的点和组织(0,0)之间计算快速通道角度(最接近八个提供值之一)?我已拆分的xy坐标系中的8个段(0,45,90,135,180,225,270,315),我需要找到点和org之间的角度(不准确的上述8只是最接近的值),而不重数学函数.我可以找到

std::pair<float,float> point;
float angle =arctan(point.second/point.first);
int index =static_cast<int>( (angle+22.5)/45);
Run Code Online (Sandbox Code Playgroud)

然后通过索引从数组中读取.(我增加了22.5度因为[-22.5, 22.5)=>0, [22.5,67.5)=>45,[67.5,112.5)=>90...)有更快的方式,任何想法(执行时间非常重要)?

c++ algorithm math mathematical-optimization

2
推荐指数
1
解决办法
1644
查看次数

为什么幂函数通常被计算为对数?

我正在研究一些x86 ASM代码以及代码的真正功能,我的理解是power函数(x ^ y)在内部用作对数函数.在内部我指的是CPU寄存器.

为什么是这样?有什么好处?它是否可以被其他高级语言(如C++)复制和借用?

c++ math x86 assembly mathematical-optimization

2
推荐指数
2
解决办法
275
查看次数

整数规划不等约束

我试图在MIP中建模以下约束:

x_1 +x_2 + ... +x_n != d
Run Code Online (Sandbox Code Playgroud)

我的想法是引入一个变量z,即1,如果x_1 + x_2 + ... + x_n = d并添加约束

z <= 0.
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何建模约束

(x_1 +x_2 + ... +x_n = d) ==> z=1 
Run Code Online (Sandbox Code Playgroud)

在整数程序中.

mathematical-optimization integer-programming

2
推荐指数
1
解决办法
665
查看次数

将参数传递给目标函数fmincon Matlab

我试图最小化由除约束变量之外的变量组成的目标函数.有没有办法将参数传递给这样的函数,例如:

data = xlsread('Returns.xlsx', 'Sheet2','A2:F324');

for i = 1:10
    returns = data(i:i+59,1:5);
    fund = data(i:i+59,6:6);
    lb = [0;0;0;0;0];
    ub = [1; 1; 1; 1; 1];
    [betas, fval] = fmincon(@obj_function, [0 .2 .2 .2 .2 .2], [], [], [], [], lb, ub, @constraints);
end
Run Code Online (Sandbox Code Playgroud)

目标函数定义为:

function [ value ] = obj_function(betas)
    value = returns*betas(2:6) + betas(1);
    value = sum((value - fund)^2);
end
Run Code Online (Sandbox Code Playgroud)

由于我的目标函数需要额外的变量,returns并且fund我可以继续从主函数传递它的最佳方法是什么?以下陈述无效,我还能做什么?

[betas, fval] = fmincon(@obj_function(returns, fund), [.2 .2 .2 .2 .2], [], [], [], [], …

matlab function mathematical-optimization

2
推荐指数
1
解决办法
2872
查看次数

如何定量测量SciPy的适合度?

我想找出最合适的数据.我做的是循环遍历各种n值并使用公式((y_fit - y_actual)/ y_actual)x 100计算每个p的残差.然后我计算每个n的平均值,然后找出最小残差均值和相应的n值并使用此值拟合.可重现的代码包括:

import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize   

x = np.array([12.4, 18.2, 20.3, 22.9, 27.7, 35.5, 53.9])
y = np.array([1, 50, 60, 70, 80, 90, 100])
y_residual = np.empty(shape=(1, len(y)))
residual_mean = []

n = np.arange(0.01, 10, 0.01)

def fit(x, a, b):
    return a * x + b
for i in range (len(n)):
    x_fit = 1 / np.log(x) ** n[i]
    y_fit = y
    fit_a, fit_b = optimize.curve_fit(fit, x_fit, y_fit)[0]
    y_fit = …
Run Code Online (Sandbox Code Playgroud)

python numpy mathematical-optimization curve-fitting scipy

2
推荐指数
1
解决办法
5549
查看次数

背包算法仅限于N元素解

这个来自adagio函数knapsack()的CRAN文档的摘录按预期运行 - 它解决了利润向量p,权重向量w和容量的背包问题cap,选择具有最大利润的元素子集受限于总权重选定的元素不超过容量.

library(adagio)
p <- c(15, 100, 90, 60, 40, 15, 10,  1)
w <- c( 2,  20, 20, 30, 40, 30, 60, 10)
cap <- 102
(is <- knapsack(w, p, cap))
Run Code Online (Sandbox Code Playgroud)

如何向解决方案添加矢量长度约束并仍然获得最佳答案?例如,上面的练习,但选定的子集必须包含正好三个元素.

r knapsack-problem mathematical-optimization

2
推荐指数
1
解决办法
1332
查看次数

使用scipy.linalg.lstsq获得最佳拟合平面到一组点的错误结果?

我有一套(x, y, z)点,我需要找到最适合他们的飞机.平面由其系数定义为:

a*x + b*y + c*z + d = 0
Run Code Online (Sandbox Code Playgroud)

或等效地:

A*X +B*y + C = z
Run Code Online (Sandbox Code Playgroud)

第二个等式只是对第一个等式的重写.

我正在使用这个要点中开发的方法,这是从本答案中给出的Matlab代码到Python的翻译.该方法找到系数以定义最适合该组点的平面方程.

问题在于我能够提出一组系数,以便更好地适应这组点.

为了定义"更好",我按照这里给出的数学计算每个点到给定平面的绝对距离之和.较小的值意味着"更好"的拟合,因为这些点然后平均更接近平面.

MWE在下面.如可以看到的,手工采摘系数导致绝对距离值(较小总和~155.89),除了使用由(上述方法找到"最好"的系数~158.78).

我在这里错过了什么?


MWE

import numpy as np
import scipy.linalg


def sum_dist_2_plane(x, y, z, a, b, c, d):
    """
    Sum of the absolute values of the distances to a plane, given by the
    a,b,c,d coefficients, for the set of points defined by x,y,z.
    """ …
Run Code Online (Sandbox Code Playgroud)

python linear-algebra mathematical-optimization scipy

2
推荐指数
1
解决办法
1214
查看次数