|
4069 | 4069 | "source": [
|
4070 | 4070 | "#### Testing Values of Kernels and Bounds with SMT"
|
4071 | 4071 | ]
|
4072 |
| - }, |
4073 |
| - { |
4074 |
| - "cell_type": "code", |
4075 |
| - "execution_count": 19, |
4076 |
| - "metadata": {}, |
4077 |
| - "outputs": [ |
4078 |
| - { |
4079 |
| - "name": "stdout", |
4080 |
| - "output_type": "stream", |
4081 |
| - "text": [ |
4082 |
| - "Lower kernel bounds (kL): [0.52729242 0.91393119 0.52729242]\n", |
4083 |
| - "Upper kernel bounds (kU): [0.96078944 1. 0.96078944]\n", |
4084 |
| - "\n", |
4085 |
| - "Kernel matrix from BnB:\n", |
4086 |
| - "[[1. 0.77880078 0.36787944]\n", |
4087 |
| - " [0.77880078 1. 0.77880078]\n", |
4088 |
| - " [0.36787944 0.77880078 1. ]]\n" |
4089 |
| - ] |
4090 |
| - }, |
4091 |
| - { |
4092 |
| - "ename": "ValueError", |
4093 |
| - "evalue": "cannot reshape array of size 2 into shape (1,3)", |
4094 |
| - "output_type": "error", |
4095 |
| - "traceback": [ |
4096 |
| - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", |
4097 |
| - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", |
4098 |
| - "Cell \u001b[0;32mIn[19], line 43\u001b[0m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;66;03m# === Kernel matrix from SMT ===\u001b[39;00m\n\u001b[1;32m 41\u001b[0m \u001b[38;5;66;03m# SMT uses r = ||(x_i - x_j)/theta|| = Euclidean norm\u001b[39;00m\n\u001b[1;32m 42\u001b[0m r \u001b[38;5;241m=\u001b[39m cdist(x \u001b[38;5;241m/\u001b[39m theta, x \u001b[38;5;241m/\u001b[39m theta, metric\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124meuclidean\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;66;03m# scaled distance\u001b[39;00m\n\u001b[0;32m---> 43\u001b[0m K_smt \u001b[38;5;241m=\u001b[39m \u001b[43mgp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msurrogatesmt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcorr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__call__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mr\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 44\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124mKernel matrix from SMT:\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 45\u001b[0m \u001b[38;5;28mprint\u001b[39m(K_smt)\n", |
4099 |
| - "File \u001b[0;32m~/Documents/Project/hiop/.venv/lib/python3.9/site-packages/smt/kernels/kernels.py:56\u001b[0m, in \u001b[0;36mPowExp.__call__\u001b[0;34m(self, d, grad_ind, hess_ind, derivative_params)\u001b[0m\n\u001b[1;32m 52\u001b[0m i, nb_limit \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m, \u001b[38;5;28mint\u001b[39m(\u001b[38;5;241m1e4\u001b[39m)\n\u001b[1;32m 53\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m i \u001b[38;5;241m*\u001b[39m nb_limit \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m d\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m]:\n\u001b[1;32m 54\u001b[0m r[i \u001b[38;5;241m*\u001b[39m nb_limit : (i \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m1\u001b[39m) \u001b[38;5;241m*\u001b[39m nb_limit, \u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mexp(\n\u001b[1;32m 55\u001b[0m \u001b[38;5;241m-\u001b[39mnp\u001b[38;5;241m.\u001b[39msum(\n\u001b[0;32m---> 56\u001b[0m \u001b[43mtheta\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreshape\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mn_components\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 57\u001b[0m \u001b[38;5;241m*\u001b[39m d[i \u001b[38;5;241m*\u001b[39m nb_limit : (i \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m1\u001b[39m) \u001b[38;5;241m*\u001b[39m nb_limit, :],\n\u001b[1;32m 58\u001b[0m axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m,\n\u001b[1;32m 59\u001b[0m )\n\u001b[1;32m 60\u001b[0m )\n\u001b[1;32m 61\u001b[0m i \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[1;32m 63\u001b[0m i \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n", |
4100 |
| - "\u001b[0;31mValueError\u001b[0m: cannot reshape array of size 2 into shape (1,3)" |
4101 |
| - ] |
4102 |
| - } |
4103 |
| - ], |
4104 |
| - "source": [ |
4105 |
| - "import numpy as np\n", |
4106 |
| - "from scipy.spatial.distance import cdist # Replace with correct import\n", |
4107 |
| - "\n", |
4108 |
| - "# === Example data ===\n", |
4109 |
| - "x = np.array([\n", |
4110 |
| - " [0.0, 0.0],\n", |
4111 |
| - " [0.5, 0.5],\n", |
4112 |
| - " [1.0, 1.0]\n", |
4113 |
| - "])\n", |
4114 |
| - "l = np.array([0.2, 0.2])\n", |
4115 |
| - "u = np.array([0.8, 0.8])\n", |
4116 |
| - "\n", |
4117 |
| - "# === Train SMT GP ===\n", |
4118 |
| - "theta = np.array([1.0, 1.0])\n", |
4119 |
| - "gp = smtKRG(theta=theta, xlimits=np.array([[0,1],[0,1]]), ndim=2, corr=\"pow_exp\")\n", |
4120 |
| - "y = np.linalg.norm(x, axis=1).reshape(-1,1) # dummy target\n", |
4121 |
| - "gp.train(x, y)\n", |
4122 |
| - "\n", |
4123 |
| - "# === Instantiate BnB object ===\n", |
4124 |
| - "bnb = BnBAlgorithmBase()\n", |
4125 |
| - "bnb.theta = theta # match SMT\n", |
4126 |
| - "bnb.set_kernel(\"pow_exp\")\n", |
4127 |
| - "\n", |
4128 |
| - "# === Kernel bounds ===\n", |
4129 |
| - "kL, kU = bnb.ker_bounds(x, l, u)\n", |
4130 |
| - "print(\"Lower kernel bounds (kL):\", kL)\n", |
4131 |
| - "print(\"Upper kernel bounds (kU):\", kU)\n", |
4132 |
| - "\n", |
4133 |
| - "# === Manual kernel matrix using BnB kernel ===\n", |
4134 |
| - "n = len(x)\n", |
4135 |
| - "K_manual = np.zeros((n, n))\n", |
4136 |
| - "for i in range(n):\n", |
4137 |
| - " for j in range(n):\n", |
4138 |
| - " d = np.sum(((x[i] - x[j]) / bnb.theta) ** 2) # scaled squared distance\n", |
4139 |
| - " K_manual[i, j] = bnb.kernel_func(d)\n", |
4140 |
| - "\n", |
4141 |
| - "print(\"\\nKernel matrix from BnB:\")\n", |
4142 |
| - "print(K_manual)\n", |
4143 |
| - "\n", |
4144 |
| - "# === Kernel matrix from SMT ===\n", |
4145 |
| - "# SMT uses r = ||(x_i - x_j)/theta|| = Euclidean norm\n", |
4146 |
| - "r = cdist(x / theta, x / theta, metric='euclidean') # scaled distance\n", |
4147 |
| - "K_smt = gp.surrogatesmt.corr.__call__(r)\n", |
4148 |
| - "print(\"\\nKernel matrix from SMT:\")\n", |
4149 |
| - "print(K_smt)\n" |
4150 |
| - ] |
4151 | 4072 | }
|
4152 | 4073 | ],
|
4153 | 4074 | "metadata": {
|
|
0 commit comments