default_test.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package main
  2. import (
  3. "fmt"
  4. "math"
  5. "testing"
  6. )
  7. // 测试函数
  8. func TestBeego(t *testing.T) {
  9. //制冷机组温控设定最低值_, _ := lib.StringToFloat32("-25")
  10. //制冷机组温控设定最高值_, _ := lib.StringToFloat32("-25")
  11. //
  12. //T := (lib.To_float32(制冷机组温控设定最低值_) + lib.To_float32(制冷机组温控设定最高值_)) / 2
  13. //fmt.Printf("转换后的 float32 值: %s\n", lib.To2(T))
  14. // 测试用例1
  15. //A1, B1 := 3.5, 6.5
  16. //a1s, b1s := findValidValues(A1, B1)
  17. //fmt.Printf("当A=%.1f, B=%.1f时:\n", A1, B1)
  18. //for i := range a1s {
  19. // fmt.Printf("A1=%.1f, B1=%.1f\n", a1s[i], b1s[i])
  20. //}
  21. //
  22. //// 测试用例2
  23. //A2, B2 := 4.0, 6.0
  24. //a1s, b1s = findValidValues(A2, B2)
  25. //fmt.Printf("\n当A=%.1f, B=%.1f时:\n", A2, B2)
  26. //for i := range a1s {
  27. // fmt.Printf("A1=%.1f, B1=%.1f\n", a1s[i], b1s[i])
  28. //}
  29. //A1, B1 := 3.5, 6.5
  30. //C1, D1 := 6.5, 3.5
  31. //a1s1, b1s1 := findOptimalAdjustment(A1, B1, C1, D1)
  32. //fmt.Printf("当A=%.1f, B=%.1f时:\n", A1, B1)
  33. //fmt.Printf("最优解 A1=%.1f, B1=%.1f\n", a1s1, b1s1)
  34. //
  35. //// 测试用例2
  36. //A2, B2 := 4.0, 6.0
  37. //C2, D2 := 3.5, 6.5
  38. //a1s2, b1s2 := findOptimalAdjustment(A2, B2, C2, D2)
  39. //fmt.Printf("\n当A=%.1f, B=%.1f时:\n", A2, B2)
  40. //fmt.Printf("最优解 A1=%.1f, B1=%.1f\n", a1s2, b1s2)
  41. a, b, _ := findBindingPointsOptimalAdjustment(5.0, 5.0, 4.9, 6.5, 0.5)
  42. fmt.Printf("最优解 A1=%.1f, B1=%.1f\n", a, b)
  43. }
  44. func TestAverageOptimalAdjustment(t *testing.T) {
  45. // 输入参数
  46. A1 := 4.0
  47. B1 := 5.0
  48. C := 6.0
  49. // 计算有效区间
  50. minA := A1 - 0.5
  51. maxA := A1 + 0.5
  52. minB := B1 - 0.5
  53. maxB := B1 + 0.5
  54. // 求交集范围
  55. lowerBound := math.Max(minA, minB)
  56. upperBound := math.Min(maxA, maxB)
  57. // 确定最优调整值
  58. var optimalC float64
  59. if C < lowerBound {
  60. optimalC = lowerBound // 取区间下限
  61. } else if C > upperBound {
  62. optimalC = upperBound // 取区间上限
  63. } else {
  64. optimalC = C // 已在区间内无需调整
  65. }
  66. // 输出结果
  67. fmt.Printf("调整前C值: %.1f\n", C)
  68. fmt.Printf("有效区间: [%.1f, %.1f]\n", lowerBound, upperBound)
  69. fmt.Printf("最优调整值: %.1f\n", optimalC)
  70. fmt.Printf("调整幅度: %.1f\n", math.Abs(C-optimalC))
  71. }
  72. func findOptimalAdjustment(A, B, C, D float64) (float64, float64) {
  73. type DataPair struct {
  74. A1 float64
  75. B1 float64
  76. }
  77. var dataPairs []DataPair
  78. var A1, B1 float64 = -100, -100
  79. // 生成A1和B1的可能值
  80. for a1 := A - 1; a1 <= A+1; a1 += 0.5 {
  81. for b1 := B - 1; b1 <= B+1; b1 += 0.5 {
  82. // 检查是否存在满足条件的C值
  83. minC := math.Max(a1-0.5, b1-0.5)
  84. maxC := math.Min(a1+0.5, b1+0.5)
  85. if minC <= maxC {
  86. dataPairs = append(dataPairs, DataPair{A1: a1, B1: b1})
  87. }
  88. }
  89. }
  90. if len(dataPairs) == 1 {
  91. A1 = dataPairs[0].A1
  92. B1 = dataPairs[0].B1
  93. }
  94. if len(dataPairs) > 1 {
  95. // 寻找最优解
  96. minAdjustment := math.MaxFloat64
  97. var optimalPair DataPair
  98. for _, pair := range dataPairs {
  99. adjustment := math.Abs(pair.A1-C) + math.Abs(pair.B1-D)
  100. if adjustment < minAdjustment {
  101. minAdjustment = adjustment
  102. optimalPair = pair
  103. }
  104. }
  105. A1 = optimalPair.A1
  106. B1 = optimalPair.B1
  107. }
  108. return A1, B1
  109. }
  110. func findBindingPointsOptimalAdjustment(A, B, C, D, T_deviation float64) (float64, float64, bool) {
  111. type DataPair struct {
  112. A1 float64
  113. B1 float64
  114. }
  115. T_deviation_half := T_deviation / 2
  116. var dataPairs []DataPair
  117. var A1, B1 float64 = -100, -100
  118. // 生成A1和B1的可能值
  119. for a1 := A - T_deviation; a1 <= A+T_deviation; a1 += 0.1 {
  120. for b1 := B - T_deviation; b1 <= B+T_deviation; b1 += 0.1 {
  121. // 检查是否存在满足条件的C值
  122. minC := math.Max(a1-T_deviation_half, b1-T_deviation_half)
  123. maxC := math.Min(a1+T_deviation_half, b1+T_deviation_half)
  124. if minC <= maxC {
  125. dataPairs = append(dataPairs, DataPair{A1: a1, B1: b1})
  126. }
  127. }
  128. }
  129. if len(dataPairs) == 1 {
  130. A1 = dataPairs[0].A1
  131. B1 = dataPairs[0].B1
  132. }
  133. if len(dataPairs) > 1 {
  134. // 寻找最优解
  135. minAdjustment := math.MaxFloat64
  136. var optimalPair DataPair
  137. for _, pair := range dataPairs {
  138. adjustment := math.Abs(pair.A1-C) + math.Abs(pair.B1-D)
  139. if adjustment < minAdjustment {
  140. minAdjustment = adjustment
  141. optimalPair = pair
  142. }
  143. }
  144. A1 = optimalPair.A1
  145. B1 = optimalPair.B1
  146. }
  147. if A1 == -100 || B1 == -100 {
  148. return A1, B1, false
  149. }
  150. return A1, B1, true
  151. }