Cool problem. I love the way that real world problems challenge us to figure out to apply ML tooling.
As I understand your problem so far, it seems very applicable to neural networks. They should be able to capture the non-linearities in your problem domain quite well. The problem is just in characterising the problem domain.
I think a 2D CNN
Firstly, some clarifications that you might need to provide - but Iâll apply assumptions for now:
- As these are polygons, do they change in shape and size relative to each other or are they a regular grid? Iâll assume a regular grid for now - if thatâs not the case, you may need to apply some interpolation in order to regularize your data to a regular grid.
- Are your polygons in 2D or 3D space? Can they be approximated to 2D space, or as a 2D manifold? Initially Iâll assume a flat 2D surface, but Iâll offer some adjustments to 2.5D manifolds afterwards.
I reckon a 2D CNN is perfect for your job.
We treat each polygon as a single position, with its neighboring polygons as neighbouring positions.
CNNs nicely solve the problem of needing to calculate the local positionâs values based on its neighbours, and then calculating the neighbourâs values based on the first positionâs outcome too.
Step 1 - Preparing data for CNNs.
A loosely located set of polygons in 3D space isnât suitable for CNNs. They were designed for images, and work best on data that is at least like an image. The first step is to take your diamond-oriented polygon arrangement and make it like a regular grid. Take diagonal paths through your polygon space, either approximating or interpolating as appropriate, ending up with a regular matrix of load values. Something like in the following image:
Each âpixelâ is now represented as single decimal value.
If your polygons differ significantly in size and location, then Iâd probably suggest sampling at a higher resolution, but still producing an image tensor that is simply h x w x 1 shape (h=height,w=width).
- Output
The output of your CNN is your heat value. Trained on your data set, after the same approximations/interpolations are applied.
Extension to 2.5D manifolds. If your polygon-to-polygon relative coordinates differ in 3D dimensions, and that third dimension is important in determining heat (eg: two surfaces closer together cause heat to dissipate between them), then youâll need to apply that too. Iâd suggest adding that as an extra layer of information on top of single load value that has been applied to our regularized grid. Youâll have to figure out the details, but I imagine something like a bump-map as used in computer graphics could approximate the relative proportion of expected surface-to-surface interactions.
On that note, and getting back to the simpler 2D polygon shape and position variability. Another alternative is to use weighting to account for the relative differences. In that way, you interpolate to a grid granularity that equals the number of polygons (like in my image), but you use a weight vector to indicate the relative differences in their effect. This could even go so far as capturing a value for each adjacent. For example, in the following diagram, Iâve indicated with green arrows the way that four adjacent polygons influence the one in the middle (assuming that thereâs always exactly 4 adjacent polygons, or that we can sufficiently approximate the data in that way). Assuming that the polygon surface area is the primary factor in how it influences the heat dissipation to the middle polygon, we can set each of the four weights to indicate the relative sizes of the four neighbours. This then forms a 5-vector for each polygon, holding the polygonâs own load, plus the weighting that should be applied to the neighbours: <load, w1, w2, w3, w4>. You would use a fully-connected layer across this dimension, and a CNN across the height,width dimensions. (Sorry, I know this is possible, just not the coding that makes it happen)
I hope that made sense.
Best of luck.