首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >条件which.min函数

我有两套数据,一组是机器坐标,一组是最近的修理厂的坐标。

我有一个工作模型,把每台机器分配到最近的商店。然而,一个商店只有一台机器,而另一家商店有7台机器分配给它。

我想要的是添加一个条件,以便为每个商店分配至少2台机器,但不超过4台。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(geosphere)
library(ggplot2)
#machine Locations
machine.x <- c(-122.37, -111.72,    -111.87,    -112.05,    -87.17, -86.57, -86.54, -88.04, -86.61, -88.04, -86.61)
machine.y <- c(37.56,   35.23,  33.38,  33.57,  30.36,  30.75,  30.46,  30.68,  30.42,  30.68,  30.42)
machines <- data.frame(machine.x, machine.y)
#store locations
store.x <- c(-121.98, -112.17, -86.57)
store.y <- c(37.56, 33.59, 30.75)
stores <- data.frame(store.x, store.y)


centers<-data.frame(x=stores$store.x, y=stores$store.y)
pts<-data.frame(x=(machines$machine.x), y=(machines$machine.y))

#allocate space
distance<-matrix(-1, nrow = length(pts$x), ncol= length(centers$x))
#calculate the dist matrix - the define centers to each point
#columns represent centers and the rows are the data points
dm<-apply(data.frame(1:length(centers$x)), 1, function(x){ replace(distance[,x], 1:length(pts$x), distGeo(centers[x,], pts))})

#find the column with the smallest distance
closestcenter<-apply(dm, 1, which.min)


#color code the original data for verification
colors<-c(stores)
#create a scatter plot of assets color coded by which fe they belong to
plot(pts, col=closestcenter, pch=9)

所以,我想让每个小组的最小计数为2,最大计数为4,我试着在最近的中心变量中添加一个if get语句,但它甚至没有达到我认为的那样。我已经在网上查看过了,但是找不到任何方法将计数条件添加到which.min语句中。

注意:我的实际数据集有几千台机器和100多个商店。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-09 16:20:12

如果M是一个11×3的0-1矩阵,其中Mi,j=1,如果机器I被分配存储j和0,那么M的行必须每个和为1,列必须每个和到2到4(含2到4),我们希望选择这样一个M,它可以最小化距离sum(M * dm)的和。这将给我们0-1线性规划,如下所示。在A下面,A %*% c(M)rowSums(M)是一样的。而且,B是这样的,B %*% c(M)colSums(M)是一样的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(lpSolve)

k <- 3
n <- 11

dir <- "min"
objective.in <- c(dm)
A <- t(rep(1, k)) %x% diag(n)
B <- diag(k) %x% t(rep(1, n))
const.mat <- rbind(A, B, B)
const.dir <- c(rep("==", n), rep(">=", 3), rep("<=", 3))
const.rhs <- c(rep(1, n), rep(2, k), rep(4, k))
res <- lp(dir, objective.in, const.mat, const.dir, const.rhs, all.bin = TRUE)

res
## Success: the objective function is 9025807 

soln <- matrix(res$solution, n, k)

这个解决方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> soln
      [,1] [,2] [,3]
 [1,]    1    0    0
 [2,]    1    0    0
 [3,]    0    1    0
 [4,]    0    1    0
 [5,]    0    1    0
 [6,]    0    0    1
 [7,]    0    0    1
 [8,]    1    0    0
 [9,]    0    0    1
[10,]    0    1    0
[11,]    0    0    1

或者根据分配给每台机器的存储号向量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
c(soln %*% (1:k))
## [1] 1 1 2 2 2 3 3 1 3 2 3
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48177489

复制
相关文章
通过SmtpClient发送Exchange会议邮件
看到C#中调用Outlook API 发起会议 ,这个完全可以用SMTP方式实现的,下面我的项目中使用的代码: 对于.NET而言,从2.0开始,发邮件已经是一件非常容易的事了。而且新增了一个AlternateView,使用 AlternateView 类可以指定一个电子邮件的不同格式副本。例如,如果您发送 HTML 格式的邮件,您可能希望同时提供邮件的纯文本格式,以防一些收件人使用的电子邮件阅读程序无法显示HTML 内容。 通过使用AlternateView我们就可以实现Exchange 会议邮件的发送。核
张善友
2018/01/19
1.1K0
SmtpClient发送邮件遭遇The specified string is not in the form required for a subject.
通过System.Net.Mail发送邮件,出现错误: System.ArgumentException: The specified string is not in the form required for a subject.    at System.Net.Mail.Message.set_Subject(String value)    at System.Net.Mail.MailMessage.set_Subject(String value) 通过Reflector代码看到 Sys
张善友
2018/01/19
7670
c# 使用Codosys.dll(CDO)发送邮件
从C:\Windows\System32将Codosys.dll拷到你的项目里,然后引用,或者直接引用Com组件也可以
冰封一夏
2019/09/11
6450
c#发送邮件含附件
在网上巴拉巴拉找个的,然后修改了下,测试可用 using System; using System.Collections.Generic; using System.Text; using System.Net.Mail; using System.Net.Mime; using System.Net; namespace CustomerDetails { public class SendEmail { private MailMessage mailMessage;
冰封一夏
2019/09/10
1.1K0
SpringBoot发送邮件+使用html模板发送邮件
这两天在公司做商城系统有一个业务用到了发送邮件功能 springboot 有spring-boot-starter-mail
@依然范特西
2022/12/12
3K0
使用python发送邮件告知SSL证书到期时间
现在域名上面很多证书,需要一个强有力的工具去查看并且了解到期时间的状况然后告知你。 检测脚本下载地址: sslooker.kernel3.10.0.x8664.rar
cuijianzhe
2022/06/14
1.1K0
使用python发送邮件告知SSL证书到期时间
使用 Java 发送邮件
在我们的应用程序中有时需要给用户发送邮件,例如激活邮件、通知邮件等等。那么如何使用 Java 来给用户发送邮件呢?
宋先生
2019/07/18
2.4K0
使用.NET发送邮件
出自:http://blog.csdn.net/ycl111/如果你曾经使用过ASP来发送邮件,你大C#
Java架构师必看
2021/03/22
9040
使用JavaMail发送邮件
  我们在实际开发中,常常会遇到需要使用java代码进行发送邮件的需求,我们可以通过这种方式向用户推送通知等。
阿豪聊干货
2018/08/09
7530
使用 python 发送邮件
使用 python 发送邮件,这个也没啥讲的,分享三种方式发送邮件,最后一种三行代码就可以发送邮件,是不是很爽啊,话不多说,直接上代码
andrew_a
2019/08/20
1.3K0
使用Python发送邮件
之前写了一个小工具从远程服务器下载文件,然后通过附件方式发送给自己的邮箱,中间用到了Python里跟邮件相关的两个标准库email和smtp,使用也并不复杂。
杜逸先
2023/04/13
5010
使用 GOLANG 发送邮件
生活和工作中,咱们都离不开邮件的收发,要么在手机上查收和发送,要么在自己的电脑前面进行邮件编辑和处理
阿兵云原生
2023/02/16
2.3K0
使用nodemailer发送邮件
参考 https://github.com/nodemailer/nodemailer/issues/759
ltfei
2023/03/06
1K0
使用SpringBoot发送邮件
电子邮件服务器类比于现实中的邮局。用户发邮件时,会将邮件发送到邮件服务器,邮件服务器将邮件再发送到接收方的电子邮箱中。
Lvshen
2022/05/05
7890
使用SpringBoot发送邮件
[Python运维]使用Python发送邮件
这个专题讲解Python相关方面的内容,首先是运维方面,例如数据库,Linux等,后续会有Web,爬虫等。
bsbforever
2020/08/19
9440
使用mailx发送邮件
如何在linux系统中,使用命令行发送邮件?又或是使用简单的命令来发送邮件?linux系统中提供了名为mailx的程序,能帮助我们实现在命令行里发送邮件。
zhangheng
2020/04/29
1.7K0
使用PHPMailer发送邮件
站长已将PHPMail进行了再次封装,使用快捷方便,使用之前请先下载插件包: PHPMailer-Sindsun.rar  下面直接贴出使用的方法(这里用的ThinkPHP将行演示): <?php
Sindsun
2019/12/06
8310
使用PHPMailer发送邮件
使用 Emailjs 发送邮件
突然需要一个后端发送邮箱验证码的功能,我使用的后端框架是基于 Node.js 搭建的,所以准备找一个合适的能够调用 SMTP 服务发送邮件的轮子。
Kindem
2022/08/12
1.5K0
使用 Emailjs 发送邮件
System.Net.Mail.SmtpClient通过SSL/TLS协议发送邮件失败问题解决
通过System.Net.Mail使用SSL协议发送邮件失败并报错 System.Net.Mail.SmtpException: Failure sending mail
KenTalk
2020/03/05
1.7K0
使用JavaMail发送邮件
SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件
星哥玩云
2022/07/11
1.3K0
使用JavaMail发送邮件

相似问题

邮件需要很长时间才能发送

32

Joomla:发送邮件需要很长时间

10

使用SmtpClient发送邮件

50

使用SmtpClient发送邮件列表

21

在localhost中发送邮件需要很长时间

51
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文