生成随机函数f3,利用f3生成f18(python)字节面试题

一、题目

给定一个完全随机函数f3。能够完全随机产生1~3之间任意一个自然数。现在要构造一个f18,让其能随机产生1~18之间任意一个自然数,要求写出f18的函数,另外要测试是否符合预期,f18要用f3

二、代码

欢迎大家给我更优解,目前写的代码貌似生成的都不够均匀

2.1 三进制

2.2 索引➕偏移

以下是CEC2014测试函数Python版本实现,包括F1至F30共30个函数: ```python import numpy as np from scipy.special import gamma def F1(x): return np.sum(x ** 2) def F2(x): return np.sum(np.abs(x)) + np.prod(np.abs(x)) def F3(x): dim = len(x) return np.sum([np.sum(x[:i]) ** 2 for i in range(dim)]) def F4(x): return np.max(np.abs(x)) def F5(x): dim = len(x) return np.sum([100 * (x[i + 1] - x[i] ** 2) ** 2 + (x[i] - 1) ** 2 for i in range(dim - 1)]) def F6(x): return np.sum(x ** 2 - 10 * np.cos(2 * np.pi * x) + 10) def F7(x): dim = len(x) return np.sum(i * x[i] ** 4 for i in range(dim)) + np.random.rand() def F8(x): dim = len(x) return np.sum(-x * np.sin(np.sqrt(np.abs(x)))) + 418.9829 * dim def F9(x): dim = len(x) return 1 / 0.2 * np.exp(-0.2 * np.sqrt(1 / dim * np.sum(x ** 2))) - np.exp(1 / dim * np.sum(np.cos(2 * np.pi * x))) + np.exp(1) def F10(x): dim = len(x) return 1 / 4000 * np.sum(x ** 2) - np.prod(np.cos(x / np.sqrt(np.arange(1, dim + 1)))) + 1 def F11(x): dim = len(x) return np.sum(x ** 2) / dim - np.prod(np.cos(x / np.sqrt(np.arange(1, dim + 1)))) + 1 def F12(x): dim = len(x) return -20 * np.exp(-0.2 * np.sqrt(1 / dim * np.sum(x ** 2))) - np.exp(1 / dim * np.sum(np.cos(2 * np.pi * x))) + 20 + np.exp(1) def F13(x): dim = len(x) return 0.1 * (np.sin(3 * np.pi * x[0])) ** 2 + np.sum((x[:-1] - 1) ** 2 * (1 + 10 * (np.sin(np.pi * x[:-1] + 1)) ** 2)) + (x[-1] - 1) ** 2 * (1 + (np.sin(2 * np.pi * x[-1])) ** 2) def F14(x): dim = len(x) return 2 / dim * np.sum(np.abs(x ** 7 - 2 * x ** 5 + x ** 3)) + np.prod(np.cos(x)) def F15(x): dim = len(x) return np.sum(x ** 2 - 10 * np.cos(2 * np.pi * x) + 10 * np.exp(1) for i in range(dim)) def F16(x): dim = len(x) return 4 * (x[0] ** 2) - 2.1 * (x[0] ** 4) + (x[0] ** 6) / 3 + np.sum(x[1:] ** 2 - 10 * np.cos(2 * np.pi * x[1:]) + 10 for i in range(dim)) def F17(x): dim = len(x) return np.sum((x ** 2 - 10 * np.cos(2 * np.pi * x)) / (1 + 0.1 * np.power(np.power(x, 2), 2)) + 10 / np.power(1 + 0.1 * np.power(np.power(x, 2), 2), 2) for i in range(dim)) def F18(x): dim = len(x) return np.max(np.abs(x)) + np.sum(np.sin(x ** 2)) def F19(x): dim = len(x) return np.sum((x + 0.5) ** 2 - 10 * np.cos(2 * np.pi * (x + 0.5)) for i in range(dim)) def F20(x): dim = len(x) return -np.exp(-0.5 * np.sum((x - 1 / np.sqrt(dim)) ** 2)) + 2 * np.exp(-0.5 * np.sum(x ** 2)) + np.exp(0.5 * np.sum(np.cos(2 * np.pi * x))) - np.exp(0.5 * np.sum(np.cos(2 * np.pi * (x - 1 / np.sqrt(dim))))) def F21(x): dim = len(x) return np.sum(np.abs(x)) + np.prod(np.abs(x)) + np.sum(x ** 2) def F22(x): dim = len(x) return 0.1 * (np.sin(3 * np.pi * x[0])) ** 2 + np.sum((x[:-1] - 1) ** 2 * (1 + (np.sin(3 * np.pi * x[1:])) ** 2) + (x[-1] - 1) ** 2 * (1 + (np.sin(2 * np.pi * x[-1])) ** 2)) def F23(x): dim = len(x) return np.sum(np.power(np.abs(x), np.arange(1, dim + 1))) + np.random.rand() def F24(x): dim = len(x) return np.sum(np.abs(x) ** (np.arange(1, dim + 1)) + np.sin(np.abs(x) ** (np.arange(1, dim + 1)))) def F25(x): dim = len(x) return np.sum(np.abs(x ** 2 - 10 * np.cos(2 * np.pi * x)) ** 0.25 + 10 * np.exp(1) / dim * (1 - np.sin(np.pi * x[:-1])) ** 2) def F26(x): dim = len(x) return -np.sum(np.sin(x) * np.sin((np.arange(1, dim + 1)) * x ** 2 / np.pi) ** (2 * 10)) def F27(x): dim = len(x) return np.sum(np.power(np.sum(np.sin(x + np.power(np.arange(1, dim + 1), 2) ** 0.5 * x ** 2 / np.pi), 2), 0.25) + np.random.rand()) def F28(x): dim = len(x) return np.sum(-x * np.sin(np.sqrt(np.abs(x))) - (1 + 0.001 * np.sum(x ** 2)) ** 2) def F29(x): dim = len(x) return np.sum(0.5 + (np.sin(np.sqrt(x ** 2 + (np.roll(x, -1) ** 2)))) ** 2 - 0.5 / (1 + 0.001 * (x ** 2 + (np.roll(x, -1) ** 2))) ** 2) def F30(x): dim = len(x) return 1 / 4000 * np.sum(x ** 2) - np.prod(np.cos(x / np.sqrt(np.arange(1, dim + 1)))) + np.random.rand() ``` 注意:在函数F7、F8、F9、F13、F17、F18、F22、F23、F24、F26、F27和F29中,都含有随机项,每次计算结果可能会有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rebecca.Yan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值