SIMULATE ANNEAL
模拟退火
想不出来别的做法的时候,亦或是函数特征比较明显的时候,具体一点,就是很明显的能看出来他是个函数,且在规定范围内有极值的时候可以使用模拟退火。
AcWing3167
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<ctime>
#define x first
#define y second
using namespace std;
typedef pair<double, double> PDD;
const int N = 110;
int n;
PDD q[N];
double ans = 1e8;
double rand(double l,double r) {return (double) rand() / RAND_MAX * (r - l) + l;
}
double get_dist(PDD a, PDD b) {double dx = a.x - b.x;double dy = a.y - b.y;return sqrt(dx * dx + dy * dy);
}
double calc(PDD p) {double res = 0;for(int i=0;i < n;i ++) res += get_dist(p, q[i]);ans = min(ans, res);return res;
}
void simulate_anneal() {PDD cur(rand(0, 10000), rand(0, 10000));for(double t = 1e4; t > 1e-4; t *= 0.9) {PDD np(rand(cur.x - t, cur.x + t), rand(cur.y - t, cur.y + t) );double dt = calc(np) - calc(cur);if ( exp(- dt / t) > rand(0,1)) cur = np;}}
int main()
{scanf("%d",&n);for(int i=0;i < n;i ++ ) scanf("%lf%lf",&q[i].x,&q[i].y);for(int i=0;i < 100;i ++ ) simulate_anneal();printf("%%.0lf\n",ans);return 0;
}
AcWing2680
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
const int N = 25, M = 10;
int n , m ;
int w[N], s[M];
double ans = 1e8;
double calc()
{memset(s, 0 ,sizeof s);for(int i = 0;i < n;i ++) {int k = 0;for(int j=0; j < m;j ++) if(s[j] < s[k])k = j;s[k] += w[i];}double avg = 0;for(int i=0;i<m;i++) avg += (double)s[i] / m;double res = 0;for(int i=0;i<m;i++) res += (s[i] - avg) * (s[i] - avg);res = sqrt(res / m);ans = min(ans ,res);return res;
}
void simulate_anneal() {random_shuffle(w, w+n);for(double t=1e6; t > 1e-6; t *= 0.95) {int a = rand() % n , b = rand() % n;double x = calc();swap(w[a], w[b]);double y = calc();double delta = y - x;if (exp(-delta / t) < (double) rand()/RAND_MAX)swap(w[a], w[b]);}
}
int main()
{cin >> n >> m;for(int i=0;i<n;i++) cin >> w[i];for(int i=0;i<100;i++) simulate_anneal();printf("%.2lf\n",ans);return 0;
}
SIMULATE ANNEAL相关推荐
- 模拟退火(Simulate Anneal)算法
算法介绍 模拟退火算法(Simulate Anneal,SA)是一种通用概率演算法,用来在一个大的搜寻空间内找寻命题的最优解.美国物理学家 N.Metropolis 和同仁在1953年发表研究复杂系统 ...
- 人工智能(Artificial Intelligence)常用算法
https://blog.csdn.net/qq_35624642/article/details/72817168 个体人工智能 -随机数(Random) -A*寻路(A* Search Algor ...
- JZOJ 5267. 费马点问题
Description 给n个点,每个点的横纵坐标为[0,10000]内的整数,找出一个点,使这个点到其他所有点的距离之和最小,也就是求费马点. 找到的点可能是小数. Input 第一行一个整数n表示 ...
- 模拟退火总结+洛谷模板题(P1337 [JSOI2004]平衡点 / 吊打XXX)
原来就听说过模拟退火,然后一直觉得神奇,但是没有真正的去实现这个算法. 模拟退火对TSP之类的问题很实用. 1.概念:模拟退火算法(Simulate Anneal,SA)是一种通用概率演算法,用来在一 ...
- 模拟退火算法(TSP问题)
模拟退火算法解决TSP问题 算法思想 模拟退火算法(Simulate Anneal,SA)是一种通用概率演算法,用来在一个大的搜寻空间内找寻命题的最优解 模拟退火算法来源于固体退火原理,将固体加温至充 ...
- 机器学习实战4-sklearn训练线性回归模型(鸢尾花iris数据集分类)
不贴图都没人看系列.... 线性回归推导: 上图求导部分有误,少些一个转置符号,更正为: 逻辑回归推导: (公式中"ln"和"log"表示一个意思,都是以&qu ...
- azure kinect三维点云_【干货】三维重建技术综述
三维重建技术通过深度数据获取.预处理.点云配准与融合.生成表面等过程,把真实场景刻画成符合计算机逻辑表达的数学模型.这种模型可以对如文物保护.游戏开发.建筑设计.临床医学等研究起到辅助的作用. 三维重 ...
- 模拟退火法-TSP问题
模拟退火算法(Simulate Anneal Arithmetic,SAA)是一种通用概率演算法,用来在一个大的搜寻空间内找寻命题的最优解.模拟退火是S.Kirkpatrick, C.D.Gelatt ...
- 三维重建:三维重建技术概述
基于视觉的三维重建,指的是通过摄像机获取场景物体的数据图像,并对此图像进行分析处理,再结合计算机视觉知识推导出现实环境中物体的三维信息. 1. 相关概念 (1)彩色图像与深度图像 彩色图像也叫作RGB ...
- azure kinect三维点云_三维重建技术,你捋清楚了吗?本文适合小白
三维重建技术通过深度数据获取.预处理.点云配准与融合.生成表面等过程,把真实场景刻画成符合计算机逻辑表达的数学模型.这种模型可以对如文物保护.游戏开发.建筑设计.临床医学等研究起到辅助的作用. 三维重 ...
最新文章
- pythonos模块介绍_Python os模块介绍
- Java总结篇系列:Java泛型
- python机器学习入门(Day1:Numpy)
- 设置Jexus开机启动
- python画端午节_我想带你去旅行,我用Python提前做了一份端午旅游攻略,请收下!...
- java接口文件定义类_Java入门笔记(四)类、包和接口
- Django-----中间件Cookie
- PyCharm修改主题和修改背景
- Mac M系列电脑 模拟器运行时 pods库 YYkit库报错
- 佳能Canon imageCLASS MF742Cdw 一体机驱动
- json特殊符号 java_java 特殊符号转json出错
- UVA 10131 Is Bigger Smarter? (DP,最长条件子序列)
- 爆破神器 Hydra 的使用
- html旋转360度特效,CSS3图片旋转特效(360/60/-360度)
- hexo博客yilia主题作者名字的更改
- 【C语言】两个变量值的交换——指针
- oracle客户端12560,windows下 sqlplus / as sysdba 报ora-12560的终极解决方法
- PatchWork组织Herbminister行动武器库大揭秘
- **关于maven的,maven配置后报 java.lang.UnsupportedClassVersionError: org/codehaus/plexus/classworlds/launche
- 《动手学机器人学》第四节(上):位姿描述
热门文章
- dqmh框架 labview_LabVIEW宝典(第2版)简介,目录书摘
- mongodb创建图书管理_基于vue 和 node Mongodb 的 图书管理系统
- Idea全部快捷键+自行修改快捷键
- 聚合四方支付系统架构及所需配置
- 计算机维修需要工具,小200个电脑维护工具,都能去开个维修店了
- ryzen linux mac,AMD Ryzen平台全新macOS10.13.3简洁安装黑苹果镜像
- 【log4cpp_学习】2_log4cpp配置文件的使用
- 《遗传算法原理及应用》笔记—基本遗传算法
- asp探针,用来检测Web服务器相关特性
- 高速公路坐标高程计算软件3.3版本发布